2016-05-11 8 views
3

Im Buch Umkehren: Secrets of Reverse Engineering auf S. 152 arbeitet er durch einige Windows-API-Wende- und wir haben herausgefunden, dass die Struktur wie dieses IchDatentypen in struct, wenn Reverse Engineering

struct TABLE 
{ 
UNKNOWN Member1; 
UNKNOWN_PTR Member2; 
UNKNOWN_PTR Member3; 
UNKNOWN_PTR Member4; 
UNKNOWN Member5; 
UNKNOWN Member6; 
UNKNOWN Member7; 
UNKNOWN Member8; 
UNKNOWN Member9; 
UNKNOWN Member10; 
}; 

sieht gefolgt wie er zu diesem Punkt gekommen, und dann schaut er auf einer anderen Funktion in der API und bietet dieses Bit

ist untersuchen Lassen gehen, was hoffentlich eine einfache Funktion ist: RtlNumberGenericTableElements. Die Idee ist, dass, wenn die Stammdatenstruktur ein Element hat, das die Gesamtzahl der Elemente in der Tabelle darstellt, diese Funktion es offen legen würde. Wenn nicht, würde diese Funktion durch alle Elemente iterieren und sie nur währenddessen zählen. Das Folgende ist die OllyDbg-Ausgabe für RtlNumberGenericTableElements.

RtlNumberGenericTableElements: 
7C923FD2 PUSH EBP 
7C923FD3 MOV EBP,ESP 
7C923FD5 MOV EAX,DWORD PTR [EBP+8] 
7C923FD8 MOV EAX,DWORD PTR [EAX+14] 
7C923FDB POP EBP 
7C923FDC RET 4 

Nun, so scheint es, dass die Frage beantwortet wurde. Diese Funktion einfach nimmt einen Zeiger auf, was man nur annehmen kann, ist die gleiche Struktur wie vorher, und gibt zurück, was in Offset +14 ist. Offensichtlich enthält Offset +14 die Nummer von Elementen in einer generischen Tabellendatenstruktur. Lassen Sie uns die Definition der TABLE-Struktur aktualisieren.

Mit nur dieser Funktion, die die Anzahl der Elemente in der Tabelle zurückgibt, aktualisiert er die Struktur wie folgt.

struct TABLE 
{ 
UNKNOWN  Member1; 
UNKNOWN_PTR Member2; 
UNKNOWN_PTR Member3; 
UNKNOWN_PTR Member4; 
UNKNOWN  Member5; 
ULONG  NumberOfElements; 
UNKNOWN  Member7; 
UNKNOWN  Member8; 
UNKNOWN  Member9; 
UNKNOWN  Member10; 
}; 

Hinweis alles, was er tut, ist Member6 Update vom Typ ULONG zu sein und es NumberOfElements nennen, offenbar das Element enthält eine Art int die Anzahl der Elemente der Tabelle zu enthalten, aber wie sieht er aus dieser weiß, dass es ist ein ULONG? könnte es nicht auch ein UINT oder INT sein oder macht er nur einige Annahmen

Antwort

0

Da dies etwa 32-Bit ist, ist ULONG das gleiche wie UINT. Und es muss unsigniert sein, weil es um die Größe/Menge von etwas geht, das nicht negativ sein kann.

Beachten Sie, dass viele andere Strukturen und Funktionen diese Werte verwenden DWORD für (Anzahl des Elements, etc.), aber es ist auch als unsigned integer wie ULONG und UINT definiert - die Unterschiede in der Nutzung sind historische (16-Bit-Ära, etc.).

Verwandte Themen