GDB でレジスタを見る

GDBレジスタを表示するときに

(gdb) info register rax # もしくは i r rax

としていたが、レジスタは変数としても参照可能なことを知った。頭に $ をつけるだけ。

(gdb) print/x $rax

変数として参照できるので、操作の度に自動でレジスタを表示する display コマンドを設定する事が可能。

(gdb) display $rax

また register をポインタに cast してごにょごにょとかも可能。

(gdb) print/x ((intptr_t*)$rax)[1]
$1 = 0x415a2c

.gdbinit

# http://0xcc.net/blog/archives/000126.html
set history save on
set history size 10000
set history filename ~/.gdb_history
set print pretty on
set print static-members off
set charset ASCII

# C++
set print demangle on

# VM registers
display/x *(((intptr_t*)$rdi) + 1)
display/s "VM::ac"

display/x *(((intptr_t*)$rdi) + 4)
display/s "VM::fp"

display/x *(((intptr_t*)$rdi) + 5)
display/s "VM::sp"

display/x *(((intptr_t*)$rdi) + 6)
display/s "VM::pc"
run