Je suis l'exécution d'un appel système sur OS X (32 bits) comme ceci:Pourquoi les systèmes BSD ont-ils besoin de sous-esp4, lors d'un appel système?
push 123
mov eax, 1
sub esp, 4
int 0x80
Et je ne comprends pas tout à fait cette lacune sub esp, 4
.
J'ai lu quelque part que BSD et ses dérivés ont toujours cet écart, mais n'ont pas pu trouver d'explication pourquoi. J'ai d'abord pensé à l'alignement des piles, mais ce n'est pas le cas, car cette ligne doit être trouvée partout, et autant que je sache, OS X nécessite un alignement de pile de 16 octets (ce qui n'est pas le cas ici non plus).).
Avez-vous une idée de ce qui se cache derrière la nécessité de faire sub esp, 4
ou pourrait me pointer vers des ressources qui le décrivent correctement?
Le raisonnement est discuté ici: https://www.freebsd.org/doc/fr/books/developers-handbook/book.html#x86-system-calls –
C'est parce que vous êtes appelé à appeler une fonction, et c'est l'espace pour l'adresse de retour. Laissez-moi trouver le doublon. – Jester
@MichaelPetch J'ai lu le même document, mais le fait que ce soit un remplacement de 'call' n'explique pas tout à fait pourquoi ce' call' est nécessaire en premier lieu – mewa