0xXX
- 1 byte = 16進数2桁 = 8 bit
0xXXXXXXXX
- 4 byte = 16進数8桁 = 32 bit
- int
0xYYYYYYYYXXXXXXXX
- 8 byte = 16進数16桁 = 64 bit
- long int
run [arg1 arg2...]
- コマンドライン引数渡して実行
- セッション内なら2回目以降は
run
だけで同じ引数渡してくれる
step
- 関数レベルでステップ実行
stepi
- アセンブラの1命令単位でステップ実行
nexti
stepi
と同じだが、関数呼び出しは1ステップにしてくれる
break
- ブレークポイント
- シンボルや直接アドレス(
*0x0000000000000
みたいな)を指定
disassemble
- アセンブラのコードで読める
- 引数にシンボル渡せる
list
- デバッグシンボル付きでビルドしてあれば、ソースコードが読める
info register
- レジスタ一覧
print
- 色々出力できる
print 0x11
print $rdx
x
- 評価?して出力
x $rdi
x/16x $rdi
$rdi
の位置から4byte毎に16個 (64byte分)
x/16g $rid
$rdi
の位置から8byte毎に16個 (128byte分)
cmp %a, %b
jl => %a > %b
jg => %a < %b
test %a, %a
je => %a == 0
jne => %a != 0
js => %a < 0
jns => %a > 0
- メモリ計算
0xXX(%a, %b, %c)
(%a + %b * %c + 0xXX)
が持ってる値をアドレスとして、そのアドレスが対象
- 例
mov (%a), %b
b = *a
mov %b, 0x8(%a)
*(a+0x8) = b
- 構造体のフィールド代入とか
- x86_64の関数の引数渡しはレジスタから
%rdi, %rsi, %rdx, %rcx, %r8, %r9
- 返り値は
%rax(%eax)