アセンブラはいまのところたまにしか触れないので、espとebpってどっちがどっちだっけとか、ebpからプラスとマイナスはどっちがどっちだっけとか、触れるたびに思ってしまう。そんなとき思い出すために、x86/x86_64関数呼び出しチートシートを書いた。呼び出し規約(calling convention)のcheet sheetみたいになってるけど、一番必要だったのは左上のスタックの絵。 (リンクでPDF。書く都合でA3にしたけど、A4で印刷しても読めると思う。) 本当はそれぞれに対して絵をつけたかったんだけど、それどころではなかった。 勉強のために書いたくらいで全然詳しくないので、間違っているところがあればぜひ教えてくださいまし。 以下余談。 興味深いのは、64bit版のcl.exe(on Windows)とgcc(on Linux)の挙動の違い。関数の引数をスタックにpushするときに、
![x86/x86_64関数呼び出しチートシートを書いた](https://cdn-ak-scissors.b.st-hatena.com/image/square/5e2f6f1bd33b9bd0b3c48f6e60b0194607df5844/height=288;version=1;width=512/https%3A%2F%2Fblogger.googleusercontent.com%2Fimg%2Fb%2FR29vZ2xl%2FAVvXsEjzxQLRoQUECnG-h0sC5xqCS4d147MoTfw5QyLzw-utTBmjMPiyDjkRwfFBbHfge0hQvh-qF-hIylV54BEeZ4hwiVQ33VMf2U-IkB6QQ5QwOs6XaAF4ReIHehQVsGyeaIICaqNSxsXtmZw%2Fw1200-h630-p-k-no-nu%2Fx86-x86-64-function-cheat-sheet.png)