Ich spiele mit gcc -S
herum, um zu verstehen, wie Speicher und Stapel funktioniert. Während dieser Stücke fand ich einige Dinge unklar. Könnten Sie mir bitte helfen, die Gründe zu verstehen?Warum gcc beim Erstellen von Assemblercode?
Wenn Aufruf der Funktion setzt Argumente für eine nannte man es
mov
zuesp
stattpush
verwendet. Was ist der Vorteil,push
nicht zu verwenden?Funktion, die mit seinem Stapel arbeitet, zeigt Argumente auf sie als
ebp + (N + offset)
(wobei N eine Größe ist, die für Rücksendeadresse reserviert ist). Ich erwarteesp - offset
, was verständlicher ist. Was ist der Grund dafür,ebp
als grundlegenden Punkt überall zu verwenden? Ich weiß, dass diese gleich sind, aber trotzdem?Was ist das für Magie am Anfang von
main
? Warum mussesp
nur auf diese Weise initialisiert werden?and esp,0xfffffff0
Danke,
Dies könnte 3 separate Fragen sein. Wie auch immer, die Antwort auf den 3. Punkt ist die Stapelausrichtung. – Mysticial