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命令単位でステップ実行
nextistepiと同じだが、関数呼び出しは1ステップにしてくれる
break- ブレークポイント
- シンボルや直接アドレス(
*0x0000000000000みたいな)を指定
disassemble- アセンブラのコードで読める
- 引数にシンボル渡せる
list- デバッグシンボル付きでビルドしてあれば、ソースコードが読める
info register- レジスタ一覧
print- 色々出力できる
print 0x11print $rdx
x- 評価?して出力
x $rdix/16x $rdi$rdiの位置から4byte毎に16個 (64byte分)
x/16g $rid$rdiの位置から8byte毎に16個 (128byte分)
cmp %a, %bjl => %a > %bjg => %a < %b
test %a, %aje => %a == 0jne => %a != 0js => %a < 0jns => %a > 0
- メモリ計算
0xXX(%a, %b, %c)(%a + %b * %c + 0xXX)が持ってる値をアドレスとして、そのアドレスが対象
- 例
mov (%a), %bb = *a
mov %b, 0x8(%a)*(a+0x8) = b- 構造体のフィールド代入とか
- x86_64の関数の引数渡しはレジスタから
%rdi, %rsi, %rdx, %rcx, %r8, %r9- 返り値は
%rax(%eax)