2013-02-28 7 views
0

Я нашел example, который использует API-интерфейс отладчика, чтобы получить PEB в дампе. Возможно ли это с помощью DbgHelp? Имеет существующий код, который использует DbgHelp для вывода комментариев и информации об исключениях. Хотелось бы получить некоторую информацию от PEB, если это возможно.Как получить доступ к PEB (блок среды процесса) в dump с помощью DbgHelp

+0

Довольно точно, чтобы использовать потоки Memory64List и MemoryInfoList, чтобы получить в памяти, где хранится PEB, но не знаете, как это сделать. –

+0

[Этот CodeProject] (http://www.codeproject.com/Articles/10438/Navigating-the-PEB) может вам помочь. Следует также упомянуть, что большая часть информации в PEB может быть получена другими, возможно, более безопасными средствами. –

+0

Спасибо. Эта статья посвящена тому, как PEB запускает процесс. Мне интересно получить его из файла дампа. –

ответ

0

Вы можете использовать функцию MiniDumpReadDumpStream для чтения потоков из файла дампа. Просто прочитайте файл дампа в памяти или переместите его в память и используйте эту функцию.

Для доступа к PEB. Прочтите ThreadListStream из файла дампа. Структура MINIDUMP_THREAD_LIST будет содержать массив ограничений MINIDUMP_THREAD, которые имеют поле Teb с адресом TEB для этого потока.

Разница TEB и PEB на 32 и 64 бит заключается в том, что указатели составляют 8 байтов на 64 бит.

Это означает, что для 32-битного процесса адрес PEB можно найти со смещением 0x30 TEB. Для 64-битного процесса адрес PEB можно найти со смещением 0x60 TEB.

При чтении памяти из файла minidump вам нужно будет свернуть свои собственные функции чтения с памятью.