计算堆栈上的帧数

时间:2012-11-06 17:46:11

标签: c assembly callstack

首先,我需要编写一个程序集(Intel IA-32)函数,它返回调用者帧指针的内容。我不认为我做得对,但我提出的是

pushl %ebp
movl %esp, %ebp
movl %eax, 4(ebp)
leave
ret

但是,我应该在c函数中使用它来计算堆栈中的帧数,而我真的不确定它应该如何工作。我是否应该跳到旧ebp中的值,然后再次调用该函数?任何指导将不胜感激。

1 个答案:

答案 0 :(得分:1)

不,您不需要跳转到任何地方,但是一旦将帧指针复制到局部变量,就可以将其视为链接列表。

 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之间的距离很小时才有意义。