Как мне прочитать PE-заголовок модуля, загруженного в память? - PullRequest
5 голосов
/ 14 октября 2009

Я экспериментирую с доступом к памяти в .NET. На данный момент у меня есть управляемая программа, которая запускает неуправляемый процесс и извлекает BaseAddress одного из его загруженных модулей (DLL). Что я хотел бы сделать, так это как-то прочитать PE-заголовок загруженного модуля, чтобы позже я смог получить адреса его экспорта.

К сожалению, я не могу найти хорошую информацию об этом. Есть идеи?

1 Ответ

5 голосов
/ 14 октября 2009

Это является хорошей отправной точкой для формата файла PE.

Вы можете P / Invoke ReadProcessMemory с базового адреса, который вам нужен, чтобы скопировать заголовки в ваш процесс. Вам нужно будет проанализировать прочитанную вами память в различных заголовках PE. Первый заголовок - IMAGE_DOS_HEADER , который указывает на IMAGE_NT_HEADERS . Затем вы можете использовать IMAGE_OPTIONAL_HEADER в IMAGE_NT_HEADERS, чтобы найти местоположение IMAGE_EXPORT_DIRECTORY в двоичном файле.

...