メモリとスタックの仕組みを理解するために、gcc -S
で遊んでいます。これらの演劇の間、私はいくつかのことがわかりました。理由を理解するのを助けてくれますか?なぜアセンブラコードを作成するときにgccがそうするのですか?
呼び出す関数はそれが
mov
push
代わりesp
にを使用していますと呼ばれる1の引数を設定します。push
を使用しない利点は何ですか?スタック位置の引数で動作する関数は、
ebp + (N + offset)
(Nはリターンアドレス用に予約されているサイズ)を指しています。私はより理解できるesp - offset
を見ることを期待する。ebp
をどこにでも使用する理由は何ですか?私はこれらの人が平等だが、とにかく知っていますか?main
の冒頭にこの魔法は何ですか?このようにしてesp
を初期化する必要があるのはなぜですか? 64ビット環境での引数はレジスタに渡されるためand esp,0xfffffff0
おかげで、
これは3つの別個の質問であり得る。とにかく、第3のポイントへの答えはスタックアライメントです。 – Mysticial