gdb でバイナリ ファイルをデバッグしています。Intel IA-32 で gcc によってコンパイルされた C コードでした。からこの出力を取得しましたobjdump
。ここの最後の行に最も興味があります。
08048d9e <func_1>
8048d9e: 55 push %ebp
8048d9f: 89 e5 mov %esp,%ebp
8048da1: 83 ec 18 sub $0x18,%esp
8048da4: c7 44 24 04 88 99 04 movl $0x8049988,0x4(%esp)
8048dab: 08
8048dac: 8b 45 08 mov 0x8(%ebp),%eax
8048daf: 89 04 24 mov %eax,(%esp)
8048db2: e8 54 01 00 00 call 8048f0b <strings_not_equal>
この最後の行は、指定されたアドレスで見つかった値を比較すると思います: 8048f0b
. 私は試みます:
(gdb) x 0x8048f0b
そして受け取る:
0x8048f0b <strings_not_equal>: 0x57e58955
アセンブリを間違って解釈していますか? これは、gdb でアドレスの値を読み取る正しい方法ですか? 私は、よりアスキーフレンドリーな16進値を見つけることを期待していました。比較される保存された文字列値を見つけることに興味があります。
また、この種のデバッグに使用したいお気に入りの GUI ツールはありますか? 私はdddを試してみることを考えていました。もっと簡単にデバッグする方法を見つけたいです。