私はこのようなOS X(32bit版)のシステムコールを実行しています:システムコールを実行するときにBSDシステムがなぜespサブを必要とするのですか?
push 123
mov eax, 1
sub esp, 4
int 0x80
そして、私はかなりそのsub esp, 4
ギャップを理解していません。
私はどこかでBSDとその派生語が常にこのギャップを持っていると読んでいますが、その理由を見つけることができませんでした。
私の最初の考えはスタックアライメントでしたが、その行はどこからでも見つかるはずで、OS Xが16バイトのスタックアライメントを必要としていることを知っている限り(どちらの場合もそうではありません)。
sub esp, 4
を実行する必要性の背後に何が隠れているのか、それを正しく説明するリソースを指摘できますか?彼らはただ周りに引数をコピーせずにint 0x80
を行うことができますので、
ここでは推論について説明します:https://www.freebsd.org/doc/en/books/developers-handbook/book.html#x86-system-calls –
これは、あなたが関数を呼び出すと予想されるためです。これが戻りアドレスのスペースです。私は重複を見つけることができます。 – Jester
@MichaelPetch非常に同じ文書を読みましたが、 'call'を置き換えるという事実は、なぜ' call'が最初に必要なのかを全く説明していません。 – mewa