64 비트 컴퓨터에서 호스팅되는 32 비트 응용 프로그램 (.NET 3.5를 대상으로 함)이 있습니다. 이 32 비트 응용 프로그램의 메모리 덤프를 분석하고 싶습니다. 32 비트 adplus 및 cdb를 사용하여 메모리 덤프를 캡처했습니다. 32 비트 windbg에 메모리 덤프를로드 중입니다. NET 2.0 sos.dll 및 .net 2.0 mscorwks.dll을 windbg에로드하고! clrstack을 실행하면 다음 오류가 발생합니다. "런타임 DLL (mscorwks.dll)을 찾지 못했습니다. 0x80004005 확장 명령에 mscorwks.dll이 필요합니다. 할 일이 있기를 바란다. " 내가 도대체 뭘 잘못하고있는 겁니까?로드 할 sos 및 clr/mscorwks.dll의 버전은 무엇입니까?
adplus -hang -quiet -p 2440 -o C:\temp
WinDbg를 명령 :
ADPlus를 명령 줄 코멘트에 요청한
정보는
0:000> .load <fullpathto>\sos.dll
0:000> lmvm mscorwks
start end module name
0:000> .exr -1
ExceptionAddress: 00000000
ExceptionCode: 80000007 (Wake debugger)
ExceptionFlags: 00000000
NumberParameters: 0
즉, mscorwks.dll을 * 대상 * (덤프)에서 찾을 수 없습니다. 디버거에 mscorwks.dll을로드하지 마십시오. "lmvm mscorwks"의 출력은 무엇입니까? .NET 3.5 (아직 2.0 런타임을 사용함)가 아직 대상 프로세스에서 초기화되지 않은 상황에 처해 있습니다. –
또 다른 질문을해야합니다. "lmvm clr"의 출력은 무엇입니까? –
WinDbg에 mscorwks.dll을로드 할 필요가 없습니다. 그것은 아무것도하지 않습니다. 디버거가 아닌 프로세스에로드해야합니다 (그렇지 않을 수도 있음). SOS를로드하는 데 사용한 명령은 무엇입니까? AdPlus를 시작하기 위해 사용하신 명령은 무엇입니까? 초기 중단 점의 희생자 일 수 있습니다. '.exr -1'의 출력 결과는 무엇입니까? 이 정보를 질문에 추가하십시오. –