Как зарегистрировать ESP?

У меня есть кусок кода, как это:

#include<stdio.h>

main()
{
   xxx(1234);
}

int xxx(int b)
{
   int c;
   c=b;
   return c;
}

Я использую GDB, чтобы показать, какое значение регистра ESP и как оно работает, сделав точку останова на xxx(1234); а также c=b; линия.

Запустите программу и остановитесь на первой точке останова, используйте i r esp а также x/x $esp, Это показывает, что esp указывает, например, на: 0xbbbbefff, и этот адрес содержит разные значения, например: 0xbb33bb33. Переходя ко второй точке останова, я повторяю две команды выше, чтобы проверить, какое значение по адресу 0xbbbbefff, оно показывает 0x000004d2 (1234 в десятичном виде).

Я знаю, что ESP указывают на вершину стека, а затем, если мы помещаем значение в стек, оно перемещается в нижний адрес и помещает значение в память по этому адресу. Например, если в первой точке останова ESP указывают на адрес 0xbbbbefff, то во второй точке останова ESP должен указывать на что-то вроде 0xbbbbefff-4=0xbbbbeffa и содержать 0x000004d2, тогда как память в 0xbbbbefff все еще содержит 0xbb33bb33. Но я видел в GDB, что значение 0x000004d2 содержится в 0xbbbbefff (предыдущий верхний стек перед вызовом функции xxx).

Я неправильно понимаю в стеке?

0 ответов

Другие вопросы по тегам