16,472
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
void whocallme();
void fun1() {
printf("in fun1\n");whocallme();
}
void fun2() {
printf("in fun2\n");whocallme();
}
void fun3() {}
void whocallme() {
int *_ebp;
__asm {
mov eax,ebp
mov _ebp,eax
}
#ifdef _DEBUG
printf("\nfun1,fun2,fun3,_ebp=%08x,%08x,%08x,%08x\n",(int)fun1+5+*(int *)((int)fun1+1),(int)fun2+5+*(int *)((int)fun2+1),(int)fun3+5+*(int *)((int)fun3+1),(int)_ebp);
#else
printf("\nfun1,fun2,fun3,_ebp=%08x,%08x,%08x,%08x\n",(int)fun1,(int)fun2,(int)fun3,(int)_ebp);
#endif
printf("ret addr=%08x\n",_ebp[1]);
#ifdef _DEBUG
if ((int)fun1+5+*(int *)((int)fun1+1)<=_ebp[1] && _ebp[1]<(int)fun2+5+*(int *)((int)fun2+1)) printf("fun1 callme\n");
if ((int)fun2+5+*(int *)((int)fun2+1)<=_ebp[1] && _ebp[1]<(int)fun3+5+*(int *)((int)fun3+1)) printf("fun2 callme\n");
#else
if ((int)fun1<=_ebp[1] && _ebp[1]<(int)fun2) printf("fun1 callme\n");
if ((int)fun2<=_ebp[1] && _ebp[1]<(int)fun3) printf("fun2 callme\n");
#endif
}
int main() {
fun2();
fun1();
return 0;
}