itmediaの「main()関数の前には何があるのか」の連載を読んでわからなかったことや、調べたことをメモする
(作者サポートページ)
第二回は"「Hello World!」の主役printf()の内部動作をデバッガGDBで追う"
gdbserverを使う話が出てきた
https://www.codeproject.com/KB/mcpp/remote_debugging/3.jpg
printfの逆アセンブル結果のニーモニックleaがわからなかった
movはラベルを指定すると、ラベルの先にある中身をコピーする。
leaは、アドレスの先の中身ではなく、アドレスそのものをコピーする。
movは中身の値、leaはアドレスをコピーするみたい
ニーモニックleaveも知らないな
調べてみると、
leave
命令は、以下の2つの命令を組み合わせたのと同等の処理をします。mov esp, ebp pop ebp
https://vanya.jp.net/os/x86call/#enterleave:~:text=leave%E5%91%BD%E4%BB%A4%E3%81%AF,ebp%0Apop%20ebp
とのこと。
retの前に必要な処理みたい
retはスタックに積まれてるアドレスから呼び出しもとに戻る命令
上でも参照した以下のサイトが関数呼び出しについてわかりやすかった
x86アセンブリ言語での関数コール (vanya.jp.net)