Как зарегистрировать 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).
Я неправильно понимаю в стеке?