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?
* Zeigerarithmetik * – WhozCraig