2017-03-15 9 views
0

Ich bin neu in Assembly und las eine Anleitung, die ein Beispiel für eine Flipperfunktion aus Ollydbg vorgestellt. Ich habe versucht, zu verstehen, was die meisten Anweisungen tun, aber die folgende Zeile hat mich völlig verwirrt:Haltewinkel in x86 Intel Assembly

01017455 |. E8 249D0000 CALL <JMP.&[email protected]@Z> 

Was in dieser Hinsicht bedeuten Klammern Winkel? Und gibt es etwas Sinnvolles im Namen dieser Funktion? Der "JMP" im Namen hat auch verwirrt - ist es nur ein Teil des Funktionsnamens und sollte ignoriert werden?

Antwort

2

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.

-1

Die spitzen Klammern werden für Windows-API-Aufrufe verwendet.

Zum Beispiel, wenn ich eine Funktion von Kernel32-Bibliothek verwendet, würde es Kernel32 mit den angel eckigen Klammern aufrufen.