目前,我正在处理一个需要在调用堆栈中输出一些值的问题。这是我所做的:
int funcA()
{
int a = 1;
int b = 2;
char c = '3';
asm("mov %ebp, ebp");
asm("mov %esp, esp");
printf("&a = %x\n", &a);
printf("&b = %x\n", &b);
printf("&c = %x\n", &c);
printf("esp = %X ebp = %X\n", esp, ebp);
}
esp 和 ebp 已提前声明。上面代码的输出是:
&a = ff7f7c
&b = ff7f78
&c = ff7f77
esp = FF7F68 ebp = FF7F88
- 为什么 &c = ff7f77?在堆栈中,无论其类型如何,每个块都应该等于 4 个字节,对吧?
- 为什么 esp = ff7f68?我认为它应该等于 &c-4
另一个问题是,如果我这样做:
printf("%x", ebp-4);
输出是
ff7f78
谁能解释为什么我的输出不是 ff7f84 ?
谢谢大家!