2009-12-21 2 views
0

관리되지 않는 DLL을 모두로드하는 x64 (관리되지 않는) 응용 프로그램을 디버깅하는 데 WinDbg (기본 x64 - Itanium이 아님)를 사용하고 있습니다.WinDbg - 혼합 x64 관리 코드/비 관리 코드

관리되지 않는 DLL 중 하나에 중단 점을 설정하려고합니다. 중단 점에 도달하고 단계별로 안내하면 표시되는 지시 사항은 완전히 달라야합니다. 나는 단계별로 WinDbg이 올바른 디스 어셈블리를 표시하지 않는다는 것을 확인한 두 가지 디스어셈블러를 확인했다.

응용 프로그램에 부착

, 나는 라인과 같이 얻을 :
ModLoad: 00000000`XXXXXXXX 00000000`YYYYYYYY C:\MyDLL.DLL 

나는 기본 주소 XXXXXXXX을 반영하기 위해 두 디셈의 주소를 조정.

무엇이 문제 일 수 있습니까?

+0

나는 (완전히 대답하지 않았다 적이있는)이 발견 : 이 어쩌면이 도움이 http://stackoverflow.com/questions/1398826/vs2008-on-win7-64-bit-debugging-a-windows-service? – devviedev

+0

해체는 일반적으로 의미가 있습니까? 나는 정적 분석에 의존하는 것과는 반대로 이익을 갖는 라이브 프로세스에서 유효한 IP를 사용하여 디코딩하므로 windbg에 대한 일반적인 선호도를 부여합니다 (그러나 디스어셈블러가 좋을 수도 있음). 당신은 약간의 어셈블리 코드를 비교할 수 있습니까? – deemok

+0

"call someFunc"vs "mov ebx, esp"입니다. 다른 지점에서 스테핑해도 일치하지 않습니다. 중단 점에 도달하면 일관성이없는 것처럼 보입니다. 나는 치지 만 중단되지 않는 중단 점을 설정합니다. – devviedev

답변

0

uf modname! FuncName이 올바른 결과를 반환합니까? 이상한 곳에서 분해/중단 점을 만들면 WinDbg를 속일 수 있습니다. x86/x64는 가변 폭 명령어 세트이므로 지시 사항의 중간에서 읽기 시작하면 디스어셈블러가 혼란 스럽습니다.

+0

.NET 해석기가 변경 될 수 있다고 생각합니까? – devviedev

+0

아니요, CLR이 관리되지 않는 DLL을 변경하지 않습니다 –

+0

"u

"을 입력하면 일치하지 않습니다. 나는 기호로 디버깅하지 않는다. 나는 또한 약간의 주소 이동을 시도했는데, 올바른 분해를하는 데 도움이되지 않습니다. – devviedev

0

어딘가에 내가 DLL에서 부적절한 진입 점과 관련된 정보를 발견했습니다. 그러나 나는이 정보로 무엇을 할 지 전혀 모른다. (나는 초급이다.)