4

まず、呼び出し元のフレーム ポインターの内容を返すアセンブリ (Intel IA-32) 関数を作成する必要があります。私はそれを正しくやっているとは思いませんが、私が思いついたのは

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

ただし、スタック上のフレーム数をカウントするためにac関数でそれを使用することになっていますが、それがどのように機能するかはまったくわかりません。古いebpの値にジャンプしてから、関数を再度呼び出す必要がありますか? ガイダンスをいただければ幸いです。

4

1 に答える 1

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の間の距離が小さい場合にのみ意味があります。

于 2012-11-06T18:11:41.197 に答える