5

32 ビット アーキテクチャと 64 ビット アーキテクチャで異なる gdb マクロを作成する必要があります。デバッグされた実行可能ファイルが 32 ビットか 64 ビットかを gdb で判断する方法を探しています。

info ターゲットには、ファイルの種類に関する情報が含まれます

例: ファイルタイプ elf32-i386

しかし、これはより長い出力に埋め込まれています。

gdb マクロは初めてなので、その出力を処理する方法や、これを取得する別の方法を見つける方法がわかりません。

当分の間、python gdb は使用しないでください。

4

4 に答える 4

3

Pythonで「汚染」されていないソリューションは次のとおりです。

define set-program-arch
    set logging file tmp.gdb
    set logging overwrite on
    set logging redirect on
    set logging on
    set pagination off
    info target
    set pagination on
    set logging off
    set logging redirect off
    set logging overwrite off
    shell echo -n 'set $program_arch="' > tmp2.gdb
    shell grep 'file type' tmp.gdb | sed "s/\.$//g" | cut -d ' ' -f 4 | tr -d '\n' >> tmp2.gdb
    shell echo '"' >> tmp2.gdb
    source tmp2.gdb
    shell rm -f tmp2.tmp tmp.gdb
end

これにより、変数program_archがデバッグ対象のバイナリの ELF タイプ (例: elf64-x86-64 ) に設定されます。楽しみ!

于 2012-09-17T01:45:29.667 に答える
1

実は、私は非常に単純な答えを見つけました

if sizeof(unitptr_t) == 4
  set $arch = 32
else 
  set $arch = 64
end
于 2012-09-13T19:28:09.420 に答える
-1

当分の間、python gdb は使用しないでください。

python-gdb なしでは、あなたが望むものを達成できるとは思いませんし、それを使って望むものを達成するのは簡単なことです。したがって、制限を緩和することを検討してください。

于 2012-09-11T04:17:06.613 に答える