C Programmierung (Funktionen Zeiger-Casting)

8
%Vor%

Wie funktioniert das? Die Zeichenfolge wird als Funktionszeiger übergeben

    
YashM 20.07.2014, 19:12
quelle

2 Antworten

11

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.)

    
Leushenko 20.07.2014 19:23
quelle
5

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.

    
hobbs 20.07.2014 19:25
quelle

Tags und Links