4

動的共有ライブラリlibexecHook.soでいくつかの関数をデバッグしようとしています。このライブラリは、execve()およびその仲間への呼び出しをインターセプトして書き換えるために、LD_PRELOADを設定してプリロードされています。デバッグの目的で、シンボルを使用してgmakeを作成しました。私が他の質問で読んだことから、これはうまくいくはずです:

gdb ~/tmp/make-dfsg-3.81/make
set exec-wrapper env LD_PRELOAD=/home/marko/execHook.C027/lib/libexecHook.so.0.0.0
start
break execve
break execvp
cont

ブレークポイントが適切に設定されているのがわかります。

4       breakpoint     keep y   0x00007ffff7bd92e0 in execvp at execHook.c:128

しかし、gdbはプリロードされたexec ..()関数で壊れることはありません。実行中にデバッグ出力を見ると、ライブラリ関数が呼び出されていることがわかります。

4

2 に答える 2

2

プリロードされたラッパー関数でgdbが壊れなかった理由は、これらがgdbがアタッチされていない子プロセスから実行されるためです。Linuxではできます

set follow-fork-mode child

で作成される子にgdbをアタッチしvfork()ます。

于 2012-02-11T16:39:56.647 に答える
1

startブレークポイントを設定する前に言ってみてください。これにより、プログラムの実行が開始され、LD_PRELOADパスを使用して、ライブラリの依存関係が満たされるようになります。次に、開始後にブレークポイントを設定し、続行します。

于 2012-02-09T22:14:57.737 に答える