진입 점을 0x15B8로 표시하는 'PE 편집기'로 Windows 실행 파일을 검사 중이며이 진입 점의 주소를 가상 주소로 어떻게 결정합니까?Windows PE가 진입 점 가상 주소를 결정합니다.
2
A
답변
1
진입 점은 모듈의로드 주소를 기준으로 저장됩니다.
모듈은 IMAGE_OPTIONAL_HEADER
(this page 참조)의 ImageBase
필드를 설정하여 원하는 주소를 지정할 수 있습니다. 그러나 OS는 기본 주소가 사용 중이거나 요즘 ASLR 때문에 다른 주소를 자유롭게 선택할 수 있습니다.
실제 실행중인 프로그램에서이 작업을 수행하는 것이 확실하지 않습니다. 구현 세부 사항이지만 NT에서는 HMODULE
을 포인터로 캐스팅 할 수 있습니다. 모듈의로드 주소 또한이를 기반으로 PE 헤더를 읽을 수 있습니다. 예를 들어, HMODULE
의 주소에 AddressOfEntryPoint
멤버를 추가하고 엔트리 포인트를 찾을 수 있습니다. 시간 정보를로드하는 대신 파일에 바이트 오프셋을 넣으려는 경우 파일을 구문 분석해야합니다. 섹션 헤더를 사용하여 파일의 위치를 찾습니다.
음, 32 비트 Windows 7에서 실행 중이며 값을 보려면 PE 편집기를 사용하고 있습니다. 진입 점 0x15B8, 이미지베이스 0x400000 및 코드베이스 0x1000을 보여줍니다. 그러면 엔트리 포인트의 가상 주소가 0x400000 + 0x1000 + 0x15B8이 될 수 있습니까? – Bootstrapper
@ user2104070 - 아니요, 0x4015B8 - 기본 주소와 진입 점이됩니다. 그러나 제가 언급했듯이, 그것은 여러분의 이미지가 * 선호 * 주소라고 말하는 것입니다; Windows는 다른 주소에서 코드를로드하기로 결정할 수 있습니다. – asveikau
고마워. – Bootstrapper