运行环境:VC++6.0
esp为堆栈指针,栈顶由esp寄存器来定位。压栈的操作使栈顶的地址减小,弹出的操作使栈顶的地址增大。
ebp是32位的bp,是基址指针。
#include<stdio.h>
void print(){
// 填充代码
unsigned int _ebp;
// 插入一条汇编指令,读取ebp
__asm mov _ebp,ebp
int *p =(int*)(*(int*)_ebp-4-4-4-7*4);
for(int i=0;i <7;i++){
printf("%d\t",p[i]);
}
printf("\n");
}
int main(){
int a = 1;
int b = 2;
char c = 'c';
int arr[]={11,12,13,14,15,16,17};
print();
return 0;
}
分析: 通过*(int*)_ebp即可得到main()函数的栈底指针。
运行结果