반응형


블로그 이미지

3DMP engines

3D그래픽스 물리 수학, 프로그래밍 GPU Shader 게임엔진 알고리즘 디자인패턴 matlab etc..

by 송정헌



(x64 OS에서) !wow64exts.sw 를 실행하면 x86 모드로 바뀐다  또한 명령입력창이 0:007:x86> 으로 x86 모드를 나타낸다


다시 !wow64exts.sw을 실행하면 다시 x64모드로 바뀐다  또한 명령 입력창이  0:007> 으로(x64) 바뀌는 것을 알 수있다.





wow64.dll 사용하는 프로세스 덤프 파일 디버깅[섭군]

최근 64비트 OS에서 실행중인 32비트 프로세스가 행이 걸린적이있었습니다. 그래서 일단 userdump 로 풀덤프를 떴습니다.

해당 덤프를 VS 로 보면 wow64cpu.dll 내부 함수에서 콜스택이 멈춰있게 나오더군요. 마지막 콜스택이 wow64cpu!CpupSyscallStub+0x9 였습니다.


해당 함수를 구글에서 검색하니 바로 나오더군요(http://blogs.msdn.com/ntdebugging/archive/2008/06/03/how-to-debug-wow64-applications.aspx )


그전에는 저게 멀까 멀뚱멀뚱 했습니다. ㅠ_ㅠ;


결론적으로는 wow64exts.dll 을 활용해서 디버깅을 해야한다입니다.


실제적으로는 아래 두명령어만 있으면 끝이더군요.


!wow64exts.kb : 콜스택을 x86 모드로 변환해서 보여줍니다.


!wow64exts.sw : 디버깅 모드를 x86모드로 변환합니다. (이후 k 를 입력하면 정상적인 x86 콜스택이 정상적으로 보입니다.)


아래는 예입니다.

사용자 삽입 이미지

콜스택이 wow64cpu!CpupSyscallStub+0x9 에서 다 멈춰있습니다.



(windbg 명령어 입력란에 !wow64exts.sw 명령을 입력)


사용자 삽입 이미지


(잘 안보이시면 클릭하셔서 보세요)


!wow64exts.sw 를 사용여 x86모드로 전환 후 콜스택을 확인하였습니다. 소스까지 나오는군요.


원인은 맨위 스레드가 메인스레드로 아래 두스레드가 종료되기를 기다리고있습니다.


두번째 스레드가 동기화 객체 획득 후 Sleep(INFINITE) 을 하고있습니다.


세번째 스레드가 동기화 객체 획득을 하려고 대기중입니다.


알고나니 정말 편하군요. ㄷㄷ


반응형

+ Recent posts