stack pointer что это

stack pointer

указатель [вершины] стека
Регистр или переменная, указывающая на вершину стека (ячейка, в которую будет помещен следующий элемент). Все операции со стеком производятся с использованием этого указателя.
[http://www.morepc.ru/dict/]

Тематики

указатель стека

[Е.С.Алексеев, А.А.Мячев. Англо-русский толковый словарь по системотехнике ЭВМ. Москва 1993]

Тематики

Смотреть что такое «stack pointer» в других словарях:

Stack Pointer — [dt. »Stapelzeiger«] (Stack Zeiger), Stapelspeicher … Universal-Lexikon

Stack Pointer — Vereinfachte Darstellung eines Stacks mit den Funktionen Push (drauflegen) und Pop (runternehmen) In der Informatik bezeichnet ein Stapelspeicher oder Kellerspeicher (kurz Stapel oder Keller, häufig auch mit dem englischen Wort Stack bezeichnet)… … Deutsch Wikipedia

Stack buffer overflow — In software, a stack buffer overflow occurs when a program writes to a memory address on the program s call stack outside of the intended data structure; usually a fixed length buffer.cite web last = Fithen first = William L coauthors = Seacord,… … Wikipedia

Pointer overflow — Pufferüberläufe (engl. buffer overflow) gehören zu den häufigsten Sicherheitslücken in aktueller Software, die sich u. a. über das Internet ausnutzen lassen können. Im Wesentlichen werden bei einem Pufferüberlauf durch Fehler im Programm zu große … Deutsch Wikipedia

Stack Overflow — Pufferüberläufe (engl. buffer overflow) gehören zu den häufigsten Sicherheitslücken in aktueller Software, die sich u. a. über das Internet ausnutzen lassen können. Im Wesentlichen werden bei einem Pufferüberlauf durch Fehler im Programm zu große … Deutsch Wikipedia

Pointer (computing) — This article is about the programming data type. For the input interface (for example a computer mouse), see Pointing device. Pointer a pointing to the memory address associated with variable b. Note that in this particular diagram, the computing … Wikipedia

Call stack — In computer science, a call stack is a stack data structure that stores information about the active subroutines of a computer program. This kind of stack is also known as an execution stack, control stack, run time stack, or machine stack, and… … Wikipedia

Extended Instruction Pointer — Als Register bezeichnet man in der Digital oder Computertechnik Speicherbereiche, die innerhalb eines Prozessors direkt mit der eigentlichen Recheneinheit verbunden sind und die unmittelbaren Operanden und Ergebnisse aller Berechnungen aufnehmen … Deutsch Wikipedia

Instruction Pointer — Als Register bezeichnet man in der Digital oder Computertechnik Speicherbereiche, die innerhalb eines Prozessors direkt mit der eigentlichen Recheneinheit verbunden sind und die unmittelbaren Operanden und Ergebnisse aller Berechnungen aufnehmen … Deutsch Wikipedia

Register Stack Engine — Die Register Stack Engine (RSE) ist ein programmiertechnischer Mechanismus zur effizienten Handhabung des Stapelspeichers (Stack) bei der IA 64, der Intel Architektur für 64 Bit Prozessoren. Die Parameter einer Funktion werden in Registern… … Deutsch Wikipedia

Источник

Указатель стека AVR

Стек в основном используется для хранения временных данных, локальных переменных и обратных адресов после прерываний и вызовов подпрограмм. Регистр Указателя Стека (Stack Pointer Register) всегда указывает на верхнюю часть стека.

Обратите внимание, что Стек выполнен как растущий из более высоких расположений памяти в более низкие. То есть визуально Стек как бы перевёрнут (см. рис.). Это означает, что команда PUSH уменьшает указатель стека.

Указатель Cтека (Stack Pointer) указывает на область данных SRAM Stack (статическая память, выделенная для стека), в которой расположены стеки подпрограмм и прерываний.

Указатель стека должен быть установлен выше 0x60.

Указатель стека уменьшается на единицу, когда данные помещаются в стек с помощью инструкции PUSH, и на два, когда возвращаемый адрес помещается в стек с помощью команды PUSH подпрограммой вызова или прерывания.

Указатель стека увеличивается на единицу, когда данные извлекаются из стека с помощью инструкции POP, и увеличивается на два, когда данные извлекаются из стека при возвращении из подпрограммы с помощью инструкции RET, или при возвращении из прерывания с помощью инструкции RETI.

Указатель стека AVR выполнен в виде двух 8-разрядных регистров в пространстве ввода-вывода. Это регистры SPL (Stack Pointer Low) и SPH (Stack Pointer High).

На рисунке показана структура регистра SPL, который расположен по адресу 0х3D. Все биты регистра доступны как для чтения, так и для записи. Начальные значения битов (Initial Value) также показаны на рисунке.

В регистры SPL и SPH необходимо загружать адрес вершины стека (адрес верхней границы ОЗУ).

Адрес вершины стека хранится в константе RAMEND, которая определена в подключаемом файле для данной модели микроконтроллера. Например, для микроконтроллера ATtiny13A в начале файла исходного кода программы надо подключить файл tn13def.inc.

Читайте также:  какие результаты должны быть на антитела к коронавирусу джи

Этот код надо разместить до вызова каких-либо подпрограмм.

Источник

Что такое базовый указатель и указатель стека? На что они указывают?

используя исходя из Википедии, в которой DrawSquare () вызывает DrawLine (),

(обратите внимание, что эта диаграмма имеет высокие адреса внизу и низкие адреса вверху.)

может ли кто-нибудь объяснить мне, что ebp и esp в этом контексте?

из того, что я вижу, я бы сказал, что указатель стека всегда указывает на верхнюю часть стека, а базовый указатель на начало текущей функции? Или что?

edit: я имею в виду это в контексте программ windows

edit2: а как же eip работы тоже?

edit3: у меня есть следующий код из MSVC++:

все они кажутся dwords, таким образом, принимая 4 байта каждый. Так что я вижу, что есть разрыв от hInstance до var_4 4 байта. Что это такое? Я предполагаю, что это обратный адрес, как можно увидеть в Википедии фото?

(Примечание редактора: удалена длинная цитата из ответа Майкла, которая не относится к вопросу, но следующий вопрос был отредактирован):

это потому, что поток вызова функции:

мой вопрос (последний, я надеюсь!) теперь, что именно происходит с момента появления аргументов функции, которую я хочу вызвать, до конца пролога? Я хочу знать, как ebp, esp развиваются во время этих моменты (я уже понял, как работает пролог, я просто хочу знать, что происходит после того, как я нажал аргументы в стеке и перед прологом).

8 ответов:

esp это, как вы говорите, это, в верхней части стека.

большинство прологов функций выглядят примерно так:

тогда позже в функции у вас может быть такой код (предполагая, что обе локальные переменные составляют 4 байта)

для вашего обновленного вопроса отсутствуют две записи в стеке:

это потому, что поток вызова функции:

ESP-это текущий указатель стека, который будет меняться каждый раз, когда слово или адрес нажимается или выскакивает из стека. EBP-это более удобный способ для компилятора отслеживать параметры функции и локальные переменные, чем использовать ESP напрямую.

Как правило (и это может варьироваться от компилятора к компилятору), все аргументы функции помещаются в стек (обычно в обратном порядке, в котором они объявлены в функции прототипа, но это варьируется). Затем вызывается функция, которая помещает обратный адрес (EIP) в стек.

при входе в функцию старое значение EBP помещается в стек, а EBP устанавливается в значение ESP. Затем ESP уменьшается (потому что стек растет вниз в памяти), чтобы выделить пространство для локальных переменных и временных функций функции. С этого момента во время выполнения функции аргументы функции располагаются в стеке с положительным значением смещения от EBP (потому что они были выдвинуты до вызова функции), а локальные переменные расположены на отрицательных смещениях от EBP (потому что они были выделены в стеке после записи функции). Вот почему EBP называется указатель фрейма, потому что он указывает к центру кадр вызова функции.

при выходе все, что должна сделать функция, это установить ESP на значение EBP (которое освобождает локальные переменные от стек, и предоставляет запись EBP в верхней части стека), затем всплывает старое значение EBP из стека, а затем функция возвращает (выталкивая обратный адрес в EIP).

вы все правильно поняли. Указатель стека указывает на верхний элемент стека, а базовый указатель указывает на «предыдущая» вершина стека перед вызовом функции.

при вызове функции любая локальная переменная будет сохранена в стеке, а указатель стека будет увеличен. Когда вы возвращаетесь из функции, все локальные переменные в стеке выходят из области видимости. Для этого установите указатель стека обратно в базовый указатель (который был «предыдущая» вершина перед вызовом функции).

делать выделение памяти таким образом очень,очень быстро и эффективно.

EDIT: для лучшего описания см. x86 разборка / функции и стековые кадры в WikiBook о сборке x86. Я пытаюсь добавить некоторые сведения, которые могут вас заинтересовать в использовании Visual Studio.

сохранение вызывающего EBP в качестве первой локальной переменной называется стандартным стековым фреймом, и это может использоваться почти для всех соглашений о вызовах в Windows. Существуют различия в том, освобождает ли вызывающий или вызываемый объект переданные параметры и какие параметры передаются в регистрах, но они ортогональны к стандартной задаче кадра стека.

говоря о программах Windows, вы, вероятно, можете использовать Visual Studio для компиляции кода C++. Имейте в виду, что Microsoft использует оптимизацию, называемую пропуском указателя кадра, что делает практически невозможным выполнение обхода стека без использования библиотеки dbghlp и файла PDB для исполняемого файла.

Читайте также:  Что такое кросс функциональное взаимодействие

Это опущение указателя кадра означает, что компилятор не сохраняет старый EBP на стандартное место и использует регистр EBP для чего-то еще, поэтому вам трудно найти вызывающий EIP, не зная, сколько места требуется локальным переменным для данной функции. Конечно, Microsoft предоставляет API, который позволяет выполнять Stack-walks даже в этом случае, но поиск базы данных таблиц символов в файлах PDB занимает слишком много времени для некоторых случаев использования.

прежде всего, указатель стека указывает на нижнюю часть стека, так как стеки x86 строятся из высоких значений адресов в более низкие значения адресов. Указатель стека-это точка, в которой при следующем вызове push (или вызове) будет размещено следующее значение. Это операция эквивалентна оператору C/C++:

базовый указатель текущего кадра. ebp обычно указывает на ваш обратный адрес. ebp+4 указывает на первый параметр вашей функции (или это значение класса метод.) ebp-4 указывает на первую локальную переменную вашей функции, обычно старое значение ebp, поэтому вы можете восстановить предыдущий указатель кадра.

давно я не занимался ассемблерным программированием, но этой ссылке может быть полезно.

процессор имеет набор регистров, которые используются для хранения данных. Некоторые из них являются прямыми значениями, в то время как другие указывают на область в ОЗУ. Регистры, как правило, используются для определенных конкретных действий, и каждый операнд в сборке потребует определенного количества данных в конкретных регистрах.

указатель стека в основном используется при вызове другие методы. С помощью современных компиляторов сначала в стек будет сброшена куча данных, а затем обратный адрес, чтобы система знала, куда вернуться, как только ей будет сказано вернуться. Указатель стека будет указывать на следующее место, где новые данные могут быть помещены в стек, где они будут оставаться до тех пор, пока не будут возвращены обратно.

базовые регистры или сегментные регистры просто указывают на адресное пространство большого объема данных. В сочетании со вторым регистратором базовый указатель будет разделите память на огромные блоки, в то время как второй регистр будет указывать на элемент внутри этого блока. Базовые указатели для этого указывают на базу блоков данных.

имейте в виду, что сборка очень специфична для ЦП. Страница, на которую я ссылался, содержит информацию о различных типах процессоров.

Edit Да, это в основном неправильно. Он описывает что-то совершенно другое в случае, если кто-то заинтересован 🙂

да, указатель стека указывает на верхнюю часть стека (будь то первое пустое место стека или последнее полное, в котором я не уверен). Базовый указатель указывает на место в памяти выполняемой инструкции. Это на уровне опкодов-самая основная инструкция, которую вы можете получить на компьютере. Каждый код операции и его параметры хранятся в памяти. Одна строка C или C++ или C# может быть переведена в один код операции или последовательность из двух или более в зависимости от того, насколько она сложна. Они записываются в память программы последовательно и выполняются. В обычных условиях базовый указатель увеличивается на одну инструкцию. Для управления программой (GOTO, IF и т. д.) Он может быть увеличен несколько раз или просто заменен следующим адресом памяти.

в этом контексте, функции хранятся в память программы по определенному адресу. Когда функция вызывается, определенная информация помещается в стек, который позволяет программе найти ее обратно туда, откуда была вызвана функция, а также параметры функции, затем адрес функции в памяти программы помещается в базовый указатель. На следующем такте компьютер начинает выполнять инструкции с этого адреса памяти. Затем в какой-то момент он вернется в ячейку памяти после инструкции, что вызывается функция и продолжается оттуда.

esp означает «расширенный указатель стека». ebp для»чего-то базового указателя». и eip для»чего-то указателя инструкции». Указатель стека указывает на адрес смещения сегмента стека. Базовый указатель указывает на адрес смещения дополнительного сегмента. Указатель инструкции указывает на адрес смещения сегмента кода. Теперь о сегментах. они представляют собой небольшие 64KB подразделения области памяти процессоров. Этот процесс известен как сегментация памяти. Я надеюсь, что это сообщение было полезно.

Источник

Stack Painter

Описание

Stack Painter – это простая игра для убивания времени. В ней вам предстоит выбивать разные блоки и сборные конструкции при помощи шарика. Хотя игрушка кажется простой, управление дается не с первого раза. Геймеру нужно подобрать определенные оттенки конструкции, в которые нужно метко попасть.

Особенности

Геймплей прост до безобразия. Вам не придется много думать или решать головоломки. Нужно просто направить шарик по правильной траектории. Для этого потребуется ловкость рук. Вернее, правильное управление пальцем одной руки. Ваша основная задача – окрасить блоки и фигуры при помощи шарика.

Читайте также:  Что такое личное хранилище

В игре присутствует два основных объекта – кольцо, разбитое на сектора и собственно шарик. Есть два типа сектора: цветной и белый. В последний как раз и нужно попасть геймеру. Если вы попадаете шариком в цвет, игра засчитывает проигрыш. Нужно разбивать только белые сектора, пока кольцо не окрасится полностью.

Как только кольцо заполняется цветом, появляется следующее, с другим цветов. Для победы вам нужно окрасить 5 колец подряд. Проблема в том, что с каждым новым уровнем сложность игры будет возрастать. Если вначале вам нужно выбить всего 5 секторов, под конец их количество вырастет до 10. За окрас всех пяти колец выдают награду. Если вы допустите ошибку, можно продолжить игру с этого же места, используя кристалл.

Достоинства

Игру ценят за ряд простых качеств:

Если вам нечем заняться, рекомендуем поиграть в эту игру. Конечно, в ней мало разнообразия. Но снять стресс она поможет. На нашем сайте вы найдете полноценную версию игры.

Установка Stack Painter с модом на много денег

В какое место устанавливать кэш

Все зависит от типа расширения устанавливаемого файла:

Что делать, если взлом не помог?

Попробуйте сделать следующее:

Если вы не нашли рабочий мод на нашем сайте, то можете не искать его где-либо еще.

Я хочу полную русификацию

Мы стараемся выкладывать самые свежие версии игр и приложений с русификацией. Если вы узнали, что появилась редакция с переводом на русский язык, обязательно сообщите нам. Оперативно найдем и обновим контент.

Моды без вирусов?

Мы тщательно проверяем каждый *.APK файл на вирусы перед его выкладкой на сайт. Но не несем ответственности за использование того или иного приложения.

Получил бан в игре, что теперь делать?

Источник

stack pointer

pointer array — массив указателей

pointer data — данные типа указателя

pointer type — данные типа указателя

urgent pointer — указатель срочности

pointer qualifier — описатель указателя

Смотреть что такое «stack pointer» в других словарях:

Stack Pointer — [dt. »Stapelzeiger«] (Stack Zeiger), Stapelspeicher … Universal-Lexikon

Stack Pointer — Vereinfachte Darstellung eines Stacks mit den Funktionen Push (drauflegen) und Pop (runternehmen) In der Informatik bezeichnet ein Stapelspeicher oder Kellerspeicher (kurz Stapel oder Keller, häufig auch mit dem englischen Wort Stack bezeichnet)… … Deutsch Wikipedia

Stack buffer overflow — In software, a stack buffer overflow occurs when a program writes to a memory address on the program s call stack outside of the intended data structure; usually a fixed length buffer.cite web last = Fithen first = William L coauthors = Seacord,… … Wikipedia

Pointer overflow — Pufferüberläufe (engl. buffer overflow) gehören zu den häufigsten Sicherheitslücken in aktueller Software, die sich u. a. über das Internet ausnutzen lassen können. Im Wesentlichen werden bei einem Pufferüberlauf durch Fehler im Programm zu große … Deutsch Wikipedia

Stack Overflow — Pufferüberläufe (engl. buffer overflow) gehören zu den häufigsten Sicherheitslücken in aktueller Software, die sich u. a. über das Internet ausnutzen lassen können. Im Wesentlichen werden bei einem Pufferüberlauf durch Fehler im Programm zu große … Deutsch Wikipedia

Pointer (computing) — This article is about the programming data type. For the input interface (for example a computer mouse), see Pointing device. Pointer a pointing to the memory address associated with variable b. Note that in this particular diagram, the computing … Wikipedia

Call stack — In computer science, a call stack is a stack data structure that stores information about the active subroutines of a computer program. This kind of stack is also known as an execution stack, control stack, run time stack, or machine stack, and… … Wikipedia

Extended Instruction Pointer — Als Register bezeichnet man in der Digital oder Computertechnik Speicherbereiche, die innerhalb eines Prozessors direkt mit der eigentlichen Recheneinheit verbunden sind und die unmittelbaren Operanden und Ergebnisse aller Berechnungen aufnehmen … Deutsch Wikipedia

Instruction Pointer — Als Register bezeichnet man in der Digital oder Computertechnik Speicherbereiche, die innerhalb eines Prozessors direkt mit der eigentlichen Recheneinheit verbunden sind und die unmittelbaren Operanden und Ergebnisse aller Berechnungen aufnehmen … Deutsch Wikipedia

Register Stack Engine — Die Register Stack Engine (RSE) ist ein programmiertechnischer Mechanismus zur effizienten Handhabung des Stapelspeichers (Stack) bei der IA 64, der Intel Architektur für 64 Bit Prozessoren. Die Parameter einer Funktion werden in Registern… … Deutsch Wikipedia

Источник

Информ портал о технике и не только