2014-07-24 1 views

답변

4

짧은 대답, MiniDumpWriteDump을 사용합니다.

세부 사항 (일부 불필요한 세부 사항은 생략했다) :

윈도우 7 버전에서

, 작업 관리자 실행 파일의 일부 래퍼 함수는 프로세스 ID와 실행 파일 이름, 예를 들어 foo.exe와 함께 호출되는이, 당신이 원하는 때마다 프로세스를 덤프 할 수 있습니다.

OpenProcess을 사용하여 프로세스에 대한 핸들을 가져오고 HeapAlloc을 사용하여 힙에 할당 된 일부 구조에 저장합니다.

그것은 GetTempPathW를 사용하여 일부 지역 변수에 임시 디렉토리를 얻을 수

PathAppendW를 사용하여, 예를 들어 foo.exe을 실행 파일 이름을 추가하고, .exe없이 foo됩니다에 PathRemoveExtension를 사용하여 확장을 제거하고 PathAddExtensionW를 사용하여 새로운 확장을 추가하고, PathYetAnotherMakeUniqueName를 호출 경로가 사용되지 않았는지 확인하거나 foo(2).DMP과 같은 새 경로를 생성하십시오. 마지막으로 CreateFile을 사용하여 파일 핸들을 가져옵니다.

DuplicateHandle을 사용하여 핸들을 복제하고이를 구조에 저장하고 새 스레드를 만들고 스레드 함수에 인수로 구조를 전달합니다. DumpType 세트 인수 MiniDumpWriteDump를 사용

스레드 호출

0x1826에 :

MiniDumpWithFullMemory | MiniDumpWithHandleData | MiniDumpWithUnloadedModules | MiniDumpWithFullMemoryInfo | MiniDumpWithThreadInfo 
4

길은 하나뿐입니다. MiniDumpWriteDump()가 그 길입니다.

당신은 쉽게 이것을 볼 수 있으며 dumpbin.exe /imports c:\windows\system32\taskmgr.exe을 실행하여 사용하는 기능을 볼 수 있습니다. DbgHelp.dll에서 MiniDumpWriteDump를 가져 오는 것을 볼 수 있습니다. 또한 DbgHelp.dll이 요즘 Windows와 함께 제공되는 이유입니다.

관련 문제