gdbであるアドレスがアドレスを指している場合のdereferenceを簡単にやりたかったのでpythonでコマンド作ってみました。
これは例えばcのコードがこうで、
void func(char *p) { printf("[*] %s\n", p); }
func()のディスアセンブル結果にこのような処理があるとします。
0x000000000040066e <+8>: mov %rdi,-0x8(%rbp)
このとき、rbp - 8のアドレスは0x7fffffffdc68で、ここはアドレス0x0000000000602010を指しています。
(gdb) x/gx $rbp - 8 0x7fffffffdc68: 0x0000000000602010
このアドレスが指す内容は以下のようにしてdereferenceできますが、ちょっと面倒ですよね。
(gdb) x/s *(char **) ($rbp - 0x8) 0x602010: "test"
ということで、作ったのがこちらです。
xコマンドのシンタックスを使う感じでdgp s $rbp - 8というように使えます。
その他、こんな感じです。
(gdb) dgp s $rbp - 8 [*]execute: x/gx $rbp - 8 [*]execute: x/s 0x0000000000602010 0x602010: "test" (gdb) dgp 4c $rbp - 8 [*]execute: x/gx $rbp - 8 [*]execute: x/4c 0x0000000000602010 0x602010: 116 't' 101 'e' 115 's' 116 't' (gdb) dgp 4s $rbp - 8 [*]execute: x/gx $rbp - 8 [*]execute: x/4s 0x0000000000602010 0x602010: "test" 0x602015: "" 0x602016: "" 0x602017: "" (gdb) dgp wx $rbp [*]execute: x/gx $rbp + 0 [*]execute: x/wx 0x00007fffffffdca0 0x7fffffffdca0: 0x00400720
( ´ー`)フゥー...
Linuxカーネル「ソースコード」を読み解く (I・O BOOKS)
- 作者: 平田豊
- 出版社/メーカー: 工学社
- 発売日: 2016/12
- メディア: 単行本
- この商品を含むブログ (1件) を見る