Я выполняет системный вызов на OS X (32-битный), как это:Почему для BSD-систем требуется подчинение, 4 при выполнении системного вызова?
push 123
mov eax, 1
sub esp, 4
int 0x80
И я не совсем понимаю, что sub esp, 4
разрыв.
Я где-то читал, что BSD и его производные всегда имеют этот пробел, но не могли найти объяснения, почему.
Моя первая мысль заключалась в выравнивании стека, но это не так, поскольку эта строка встречается повсюду, и насколько я знаю, для OS X требуется 16-байтовое выравнивание стека (что здесь не так).
Вы знаете, что скрывается за необходимостью sub esp, 4
или можете указать мне ресурсы, которые описывают его правильно?
Обоснование обсуждается здесь: https://www.freebsd.org/doc/en/books/developers-handbook/book.html#x86-system-calls –
Это потому, что вы ожидаете вызова функции, и это пространство для обратного адреса. Позвольте мне найти дубликат. – Jester
@MichaelPetch Я прочитал тот же самый документ, но тот факт, что это замена 'call', не совсем объясняет, почему этот' call' необходим в первую очередь – mewa