2009-10-13 6 views
5

Ich experimentiere mit Speicherzugriff in .NET. Im Moment habe ich ein verwaltetes Programm, das einen unmanaged Prozess startet und den BaseAddress eines seiner geladenen Module (eine DLL) abruft. Ich möchte den PE-Header des geladenen Moduls irgendwie lesen, damit ich später die Adressen seiner Exporte abrufen kann.Wie lese ich den PE-Header eines Moduls im Speicher geladen?

Leider kann ich keine gute Information darüber finden. Irgendwelche Ideen?

Antwort

5

This ist ein guter Ausgangspunkt für das PE-Dateiformat.

Sie können P/Invoke ReadProcessMemory von der Basisadresse müssen Sie die Header in Ihren Prozess kopieren. Sie müssen den gelesenen Speicher in die verschiedenen PE-Header einlesen. Der erste Header ist der IMAGE_DOS_HEADER, der Sie auf die IMAGE_NT_HEADERS verweist. Sie können dann die IMAGE_OPTIONAL_HEADER in den IMAGE_NT_HEADERS verwenden, um den Speicherort der IMAGE_EXPORT_DIRECTORY in der Binärdatei zu finden.