首先,我需要编写一个汇编 (Intel IA-32) 函数来返回调用者的帧指针的内容。我认为我做的不对,但我想到的是
pushl %ebp
movl %esp, %ebp
movl %eax, 4(ebp)
leave
ret
但是,我应该在 c 函数中使用它来计算堆栈上的帧数,但我真的完全不确定它应该如何工作。我是否应该跳转到旧 ebp 中的值,然后再次调用该函数?任何指导将不胜感激。
最佳答案
不,您不需要跳到任何地方,但是一旦您将帧指针复制到局部变量,您就可以将其视为链表。
int mymagicfunction(int a, int b){
int *c = asm_copy_ebp();
int *d = c;
while ( it_makes_sense ) {
c=*c;
dump_memory_between(c,d);
d=c;
}
也许只有当c和d之间的距离很小的时候才有意义。
关于计算堆栈上的帧数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13256461/