2013-02-28 6 views
0

디버거 엔진 API를 사용하여 덤프에서 PEB를 가져 오는 example을 찾았습니다. DbgHelp를 사용하여이 작업을 수행 할 수 있습니까? DbgHelp를 사용하여 주석 및 예외 정보를 추출하는 기존 코드를 보유하십시오. 가능한 경우 PEB에서 일부 정보를 얻고 싶습니다.DbgHelp를 사용하여 덤프에서 PEB (프로세스 환경 블록)에 액세스하는 방법

+0

Memory64List 및 MemoryInfoList 스트림을 사용하여 PEB가 저장된 메모리로 들어가는 방법을 확실히 알 수 있지만 확실하지는 않습니다. –

+0

[This CodeProject] (http://www.codeproject.com/Articles/10438/Navigating-the-PEB)가 도움이 될 수 있습니다. 나는 또한 PEB에있는 대부분의 정보가 다른, 아마 더 안전한 방법으로 얻을 수 있다고 언급해야한다. –

+0

감사합니다. 이 기사는 실행중인 프로세스에서 PEB를 가져 오는 것에 관한 것입니다. 나는 덤프 파일에서 그것을 얻는 것에 관심이있다. –

답변

0

MiniDumpReadDumpStream 함수를 사용하여 덤프 파일의 스트림을 읽을 수 있습니다. 덤프 파일을 메모리로 읽어들이거나 메모리에 맵핑하고이 함수를 사용하십시오.

PEB에 액세스하려면. 덤프 파일로부터 ThreadListStream를 읽어들입니다. MINIDUMP_THREAD_LIST 구조체에는 해당 스레드의 TEB 주소가있는 Teb 필드가있는 MINIDUMP_THREAD 구조체의 배열이 포함됩니다.

32 비트와 64 비트에서 TEB와 PEB의 차이점은 포인터가 64 비트에서 8 바이트라는 점입니다.

이것은 32 비트 프로세스에서 PEB의 주소는 TEB의 0x30 오프셋에서 찾을 수 있음을 의미합니다. 64 비트 프로세스의 경우 PEB의 주소는 TEB의 0x60 오프셋에서 찾을 수 있습니다.

미니 덤프 파일에서 메모리를 읽을 때 자신의 메모리 리더 기능을 롤백해야합니다.