c3
ist die Anweisung RET
. Wenn eine x86-Maschine zu dieser Zeichenfolge springt, die als Code interpretiert wird, führt sie RET
aus und springt daher direkt zurück, ohne etwas ausgeführt zu haben (der Rest der Zeichenfolge wird daher ignoriert). Da die Standard-Aufrufkonvention für x86 den Rückgabewert in eax
angibt, hat der Code vor der Rückgabe jedoch nichts getan, was auch immer in eax
enthalten war, ist weiterhin vorhanden und kann vom C-Code interpretiert werden es wurde als "zurückgekehrt".
Dies hängt stark davon ab, ob Ihr Computer x86 ist und Sie zwischen den Daten- und Funktionszeigern (und dem Ergebnis) wechseln können - ein sehr systemspezifischer Hack. Dies ist nicht standardkonform oder portable C auf jeden Fall!
( \xXX
ist die Escape-Syntax von C zum Einfügen einzelner nicht lesbarer Zeichen in Zeichenfolgen über ihren ASCII-Code in hex, wenn Sie diesen Teil nicht kennen.)
0xc3
ist der ret
Opcode in x86. Der Rest der Saite ist nur für den Geschmack da. Die gesamte Arbeit wird von der Aufrufkonvention erledigt, und die Aufrufkonvention cdecl
(die Standardkonvention für die Sprache C) besagt, dass eine Funktion, die int
zurückgibt, sie in eax
zurückgibt.
Ihre Funktion tut nichts , sie kehrt einfach zurück, sobald sie aufgerufen wird, aber jeder Code, der int foo = eax()
aufruft, erwartet immer noch, dass er seinen Rückgabewert in den eax
register, so wird der Inhalt des eax
-Registers in foo
kopiert.