アセンブリ言語で書いたファイル:hello.asm
$ nasm -f elf64 -o hello.o hello.asm
$ ld -o hello hello.o
$ ./hello
=> hello world
$gdb -q ./hello
(gdb) break _start
(gdb) run
Note: breakpoint 1 (disabled) also set at pc 0x7ffff7fd6210.
Breakpoint 2 at 0x7ffff7fd6210
(gdb) set disassembly-flavor intel
(gdb) disas
=>逆アセンブリされた内容が表示される
(gdb) info register #停止地点においての各レジスタを表示
(gdb) x/32xw $rsp #rspから32バイト分を16進数で表示
(gdb) print/x $rax #raxの内容を16進数で表示
■読み進めて「ほー」ってなったこと
・pushするごとに綺麗にスタックに乗せられていくのがデバッガで確認できた
・stepi しながらinfo registerで該当のレジスタに値が入っていくことが確認できた
・execveの引数はrax, rdi, rsi, rdx
・レジスタに値を入れるのと、スタックにpushするのはまた違う
・レジスタに入れるのは引数として設定するため?
・スタックにpushするのは、任意の文字列、アドレス、配列をうまく連ねるため