Нужна помощь в понимании сборки взаимодействия со стеком - PullRequest
2 голосов
/ 22 сентября 2011

Хорошо, вот сделка.Насколько я понимаю, вы можете сделать что-то подобное со стеком в сборке:

push 5
push 6

Хорошо, теперь у нас в стеке: 6 5

так

pop eax

правильно ли поставить 6 в eax?Тем не менее, что, если бы мы хотели получить 5 или какое-то значение, помещенное в стек до 6 или 5. Как бы мы его взяли?(без вытаскивания верхних значений)

Я посмотрел на это: Как работает стек на языке ассемблера? И кажется, что вы не можете получить доступ к вещам на основе адреса в стеке в сборке.Однако это не имеет особого смысла для меня.Или есть способ перебора стека, не «выталкивая» вещи сверху.Спасибо, извините за "глупый" вопрос!

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

Стек - это область памяти, как и любая другая.Регистр ESP указывает на текущую вершину стека (стек увеличивается в памяти, поэтому инструкция push будет уменьшать регистр ESP).

Доступ к определенным значениям можно получитьстек путем индексации из регистра:

mov ebp,esp
mov eax,[ebp+4]

(Если я правильно помню, вы не можете использовать режимы смещенной адресации напрямую с ESP, но вы можете использовать с EBP.)

0 голосов
/ 22 сентября 2011

Указатель стека (которым манипулируют push и pop) - это просто регистр; esp. Вы можете сместить этот регистр, чтобы получить доступ к вещам относительно текущей вершины стека.

...