質問

LD_PRELOADを使用したプログラムがあります。このプログラムは、このように実行する必要があります。「ld_preload =/path/to/libfoo.so qemu -u ld_preload a.out」、gdbがない場合。

GDBを実行しているときに私がしたことは次のとおりです。

(gdb) set environment LD_PRELOAD=/nfs_home/chenwj/tools/lib/libdbo.so

(gdb) file /nfs_home/chenwj/tools/bin/qemu-i386

(gdb) r -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1

しかし、GDBは以下のエラーを与えてくれました

Starting program: /nfs_home/chenwj/tools/bin/qemu-i386 -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1

bash: open "/bin/bash" failed: Permission denied

During startup program exited with code 66.

あらゆる提案が高く評価されました。

よろしく、chenwj

役に立ちましたか?

解決

GDB 実行可能ファイルを直接呼び出しません。代わりに、そうです

bash -c '/nfs_home/chenwj/tools/bin/qemu-i386  -U LD_PRELOAD bzip2_base.i386-m32-gcc44-annotated input.source 1'

これは、BashがI/Oリダイレクト(使用していない)の世話をするように行われます。

私の推測はそれです /bin/bash ld_preload = libdbo.soが有効になっている場合は機能しませんが、障害の正確な性質はわかりません。

この問題を回避する1つの方法は、ラッパー実行可能ファイルを作成し、実装することです C これに相当します:

export LD_PRELOAD=/nfs_home/chenwj/tools/lib/libdbo.so
exec /nfs_home/chenwj/tools/bin/qemu-i386 "$@"

その実行可能ファイルをデバッグします(設定なし LD_PRELOAD)。余分なものが表示されます SIGTRAP ラッパーのとき execve()sラップ qemu-i386, 、それを無視する必要があります continue.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top