0

GDB で C バイナリを調べているときに、スタック上の複数の値を一度に出力するにはどうすればよいですか? 次のような出力が必要です。

0xbfc3ff70:     0xb7f4bff4      0xb7f89ce0      0x00000000      0xbfc3ff98
0xbfc3ff80:     0xb7e4c943      0xb7f4c4e0      0x08048930      0xbfc3ffa4
0xbfc3ff90:     0xbfc3ffa4      0xb7f4bff4      0xbfc3ffb8      0x08048625
0xbfc3ffa0:     0x08048930      0xb7f81660      0x00000000      0xbfc45318
4

1 に答える 1

0

$ spを使用してスタックレジスタを参照し、printfを使用してスタックから値を出力できます(Cの場合と同様)。そこから、引数をprintfにキャストするだけです。

db $ printf "[%08X] 0x%08X 0x%08X 0x%08X 0x%08X\n", \
    $sp,                        \
    *(unsigned int *) $sp,      \
    *(unsigned int *)($sp + 4), \
    *(unsigned int *)($sp + 8), \
    *(unsigned int *)($sp +12)
[FFFFE080] 0x00000000 0x00000000 0xF7A3C76D 0x00000000
db $

もちろん、これを関数でラップする必要があります。例えば

define stackdump
    printf... # show bytes 0-15
    printf... # show bytes 15-31
    printf... # show bytes 32-47
end

...そしてそれを〜/ .gdbinitに貼り付けて、gdbを実行するたびに利用できるようにします。

于 2013-02-15T05:56:57.917 に答える