2011-04-25 3 views
1

이것은 간단한 질문입니다. 나는 VA에 대해 = RVA + PE 이미지베이스를 알고 있습니다. 이제 디스어셈블러에서 문자열을 찾으려고하는데, .text 섹션의 0042720E에 위치하게됩니다. .VA와 메모리 주소

이미지베이스가 400000이고 2720E가 RVA이므로 지금까지는 괜찮습니다.

하지만 왜 내가 디버거에서 명령어를로드 할 때 명령어가 매핑되는 메모리가 0140720E입니까?

0140720E (RAM에서 보는 것)과 0042720E (VA)는 FE0000에 따라 다릅니다. 이유는 무엇입니까? 내가 놓친 게 있니?

+0

실행중인 플랫폼은 무엇입니까? – JaredPar

+0

win32, PE는 실행 가능합니다. –

+0

@Paul : 해당 특정 .exe에 기본 재배치 테이블이 있습니까? – ildjarn

답변

4

실제로 두 가지 가능성이 있습니다. 재 할당이 발생했거나 RVA가 잘못되었습니다. Windows Vista 또는 Windows 7에서 ASLR로 인해 실행되는 경우 특히 해당 재 할당이 가능합니다. 어떻게 연결했는지, 어떤 디버거를 사용했는지에 따라 PE에 지정된 기본 섹션로드 주소와 일치하도록보고 된 주소를 조정할 수있는 디버거를 얻는 것이 가능합니다. ollydbg는 다음 중 하나입니다 (ollydbg를 통해 앱을 시작해야합니다. dlls)

+0

VS 디버거에도 유효합니까? 주소는 동일하게 보입니다 –

+0

@Paul : 아니요, VS 디버거는 이러한 변환을 수행하지 않습니다. 그것은 VA를있는 그대로보고합니다. ASLR이 작동중인 경우 모듈 창에 모듈이로드 된 실제 기본 주소가 표시되어야하며 여기에서 RVA를 적용 할 수 있습니다. –

+0

예, 실제로 RVA에 추가 된 주소가 정확하게 명령 주소를 표시합니다. 그 주소가 뭐니? 이미지베이스 + 무언가? –