2011-04-09 3 views
4

비주얼   스튜디오   2008 디버거는 분해 창에서 상대 주소를 표시 : 주소의 값이 너무 낮은 방법디스 어셈블리 창에 실제 EIP 주소를 표시하도록 Visual Studio 2008을 어떻게 구성합니까? 아래의 코드에서와 같이

00000548 8B 4D B8   mov   ecx,dword ptr [ebp-48h] 
0000054b 8B 01    mov   eax,dword ptr [ecx] 
0000054d FF 50 28   call  dword ptr [eax+28h] 
00000550 89 85 44 FF FF FF mov   dword ptr [ebp+FFFFFF44h],eax 
00000556 8B 8D 44 FF FF FF mov   ecx,dword ptr [ebp+FFFFFF44h] 
0000055c E8 2F 1D 2C 76  call  762C2290 
00000561 90     nop 

주의 실제 주소로. 내가 주소 0x548 (첫 줄)에있을 때 EIP는 0x034D1A90입니다. 상대 주소 (예 : 0x0548) 대신 실제 주소 (예 : 0x034D1A90)를 표시하도록 디버거/디스 어셈블리 창을 구성하는 방법은 무엇입니까?

+0

아직 VS2012로 고정되지 않았습니다. VS가 Windbg와 동등한 기능을하는 것은 여전히 ​​먼 길입니다. –

답변

4

예, 이것은 디버거의 버그입니다. 계산하는 주소는 왼쪽에 나열된 주소를 기반으로합니다. 어떤 가짜, 실제 기계 코드는 주소 0에서 시작되지 않습니다. 그것은 실제 주소를 표시하는 옵션이 없습니다.

실제 통화 대상 주소를 찾으려면 호출 명령에 중단 점을 설정해야합니다. 때 안타, 디버그 + Windows + 레지스터 및 복사/붙여 넣기 계산기에 EIP 레지스터의 값을 붙여 넣습니다. 그런 다음 호출 인수의 값을 추가하고 왼쪽에 표시된대로 address 값을 뺍니다. 그것이 실제 주소입니다.

기계어 코드를 보려면 디버거를 비 관리 모드로 전환해야합니다. Debug + Windows + Call 스택을 열고 관리되지 않는 메서드의 스택 프레임 중 하나를 두 번 클릭합니다. 하단에 확실하지 않은 경우. 이제 주소 상자에 "0x"를 입력하고 계산 한 주소를 복사하여 붙여 넣으십시오. 심볼 서버를 활성화해야합니다.

+0

철저한 설명에 감사드립니다. 나는 이것이 알려진 버그라고 추정한다. MS에 대한 수정/핫픽스가 있습니까? (나는 대답이 "아니오"일 가능성이 높습니다. 그렇지 않으면 아마도 수정을 언급했을 것입니다). – Hex440bx

+0

이 방법은 영원히 계속되었으며 디버거 인터페이스의 제한 사항에 대해서는 의문의 여지가 없습니다. 지터가 코드를 배치하는 방식을 고려할 때 이치에 맞습니다. connect.microsoft.com에 게시 할 수 있습니다. 누군가 이미 검색을 한 것 같습니다. 투표 해. –