1

i am using ptrace to get information related to Callstack on Linux. i can retrieve Spack Pointer to my stack using register returned by ptarces. but using this stack pointer how can i retrieve information related to Function name and signature of current call stack?

are there any Linux APIs to traverse this callstack?

please help.. i am looking for it from last few days...

thanks in advance Sandeep

4

2 に答える 2

0

最初に取得する必要があるのは、コード アドレスのリストです。現在実行中の関数のリストと、コール チェーンをさかのぼるリターン アドレスです。

x86 では、%eipレジスタには現在実行中の関数のコード内のメモリ アドレスが含まれます。レジスタは、以前の値が格納されているスタック上の場所を指し、その後に戻り値が続きます%ebp%ebpその一連の%ebp値をたどり、リターン アドレスを記録する必要があります。

次に、デバッグしているバイナリ ファイルの DWARF デバッグ情報を読み取り、コード アドレスを解決して関数名に戻す必要があります。

コードがフレーム ポインターを使用してコンパイルされている場合にのみ、バックトレースを確実に実行できることに注意してください。

于 2010-04-16T00:53:16.617 に答える
0

この場合、libunwind を使用することを強くお勧めします。これは、コール スタックをトラバーサルするための優れた API を提供します。これは、オブジェクト ファイル内の .eh_frame ヘッダーの存在に依存します。ローカルおよびリモート (ユース ケース) コンテキストの両方で使用できます。スタックの巻き戻しは、DWARF 情報やデバッグ ビルドに依存しません。

于 2010-04-16T14:24:11.677 に答える