2016-09-29 4 views
0

Mein Programm läuft auf einem 32-Bit-Windows, daher ist der Typ der Adresse im virtuellen Speicherbereich DWORD. Und ich möchte API durch Ändern der Adresse der API in IAT haken. Also bekomme ich zuerst die Basisadresse des Bildes des Zielprozesses. Dann versuche ich, die Startadresse der Struktur IMAGE_OPTIONAL_HEADER zu erhalten.Worin besteht der Unterschied zwischen dem Typ einer 32-Bit-Adresse (BYTE *) und (DWORD *)?

IMAGE_OPTIONAL_HEADER32* pOptionalHeader=(IMAGE_OPTIONAL_HEADER*)((BYTE*)g_hCurrentProcessBase+pDosHeader->e_lfanew+24); //variable g_hCurrentProcessBase is the base address of the image of the target process 

Wie Sie sehen, ich warf g_hCurrentProcessBase-BYTE* Typ, aber zuerst, ich gecastet es DWORD* Art, wie folgt aus:

IMAGE_OPTIONAL_HEADER32* pOptionalHeader=(IMAGE_OPTIONAL_HEADER*)((DWORD*)g_hCurrentProcessBase+pDosHeader->e_lfanew+24); 

Aber es hat nicht funktioniert, eine falsche Adresse bekommen von Struktur. Aber der Wert der Variablen g_hCurrentProcessBase sollte ein DWORD sein (ich es auf 32-Bit-Windows-System ausführen), aber das Gießen dieser Variable auf DWORD * hat nicht funktioniert, so dass es eine falsche Adresse bekommen. Aber es funktioniert nicht, BYTE* funktioniert, warum nicht den Unterschied zwischen ihnen? Warum Casting es zu DWORD * nicht funktioniert?

+0

* Zeigerarithmetik * – WhozCraig

Antwort

3

Die Zeigerarithmetik unterscheidet sich je nach Art des Werts, auf den sie zeigt.

Wenn Sie den Zeiger auf DWORD übertragen, fügt das Hinzufügen von 24 tatsächlich 24*sizeof(DWORD) zu Ihrer Adresse hinzu.

Wann BYTE Gießen, es kommt noch hinzu, 24 an die Adresse (BYTE ist 1 Byte)

Hinweis: Wenn Sie wirklich Ihren Zeiger als DWORD wollte (hier nicht der Fall):

Wenn Sie 24 Bytes überspringen möchten, fügen Sie einfach 24/sizeof(DWORD) zu Ihrem DWORD* Zeiger hinzu. Da DWORD die Größe 4 hat funktioniert es wie Sie wollen (selbst wenn es 2 oder 8 wäre, würde es funktionieren).

Oder berechnen, unter Verwendung des Zeigers BYTE* gegossen und dann cast DWORD*

Verwandte Themen