Dies scheint ein Aufruf zu einem statisch verknüpften .LIB
in Ihrer Datei zu sein. Unter Windows werden API-/Bibliotheksaufrufe durch Aufrufen einer JMP
-Anweisung in einem speziellen Abschnitt der ausführbaren Datei realisiert.
Zum Beispiel
CALL <JMP.&[email protected]@Z>
eine CALL
auf die folgende Anweisung tun
JMP.&[email protected]@Z
Die CALL
schiebt die Rücksprungadresse auf den Stack und springt dann auf die folgenden JMP
Anweisung in diesem Abschnitt. Diese JMP
wird die Absenderadresse nicht ändern - so ist es effektiv wie eine direkte CALL
.
Vereinfachtes:
curEIP:
CALL <JMP.&[email protected]@Z> ; pushes (curEIP+insLen) to the stack and JMPs to (some virtual label named) `msvcrt.??3` in this section named above
...
msvcrt.??3:
JMP [email protected] ; JMPs to `[email protected]` - address of the real function in the statically linked LIB in memory
...
; after the CALL completes...
... es kehrt zu der Adresse Rückgabewert vorher auf den Stapel (initial EIP + instructionLengthInBytes) geschoben, die Ausführung fortzusetzen.
Was bedeuten Winkelhalter in dieser Hinsicht?
Sie sind nur eine Konvention Sie die relevanten Daten des obigen Schemas zeigen
und gibt es etwas Sinnvolles in dem Namen dieser Funktion?
Ja. Siehe oben. Der Name zwischen den Klammern unterscheidet sich von Debugger zu Debugger.
Die "JMP." im Namen hat auch verwirrt - ist es nur ein Teil des Funktionsnamens und sollte ignoriert werden?
Die <JMP...
einfach incidcates, dass die folgenden Zeichen/Adresse ist als Verweis auf die Sprungtabelle für statisch gelinkte Bibliotheken in der ausführbaren Datei zu interpretieren (in dem (oben genannten) Sonderteil enthält). Schauen Sie in einen PE-Explorer/Debugger, um das nachzuvollziehen.