2013-03-23 3 views

답변

1

진입 점은 모듈의로드 주소를 기준으로 저장됩니다.

모듈은 IMAGE_OPTIONAL_HEADER (this page 참조)의 ImageBase 필드를 설정하여 원하는 주소를 지정할 수 있습니다. 그러나 OS는 기본 주소가 사용 중이거나 요즘 ASLR 때문에 다른 주소를 자유롭게 선택할 수 있습니다.

실제 실행중인 프로그램에서이 작업을 수행하는 것이 확실하지 않습니다. 구현 세부 사항이지만 NT에서는 HMODULE을 포인터로 캐스팅 할 수 있습니다. 모듈의로드 주소 또한이를 기반으로 PE 헤더를 읽을 수 있습니다. 예를 들어, HMODULE의 주소에 AddressOfEntryPoint 멤버를 추가하고 엔트리 포인트를 찾을 수 있습니다. 시간 정보를로드하는 대신 파일에 바이트 오프셋을 넣으려는 경우 파일을 구문 분석해야합니다. 섹션 헤더를 사용하여 파일의 위치를 ​​찾습니다.

+0

음, 32 비트 Windows 7에서 실행 중이며 값을 보려면 PE 편집기를 사용하고 있습니다. 진입 점 0x15B8, 이미지베이스 0x400000 및 코드베이스 0x1000을 보여줍니다. 그러면 엔트리 포인트의 가상 주소가 0x400000 + 0x1000 + 0x15B8이 될 수 있습니까? – Bootstrapper

+0

@ user2104070 - 아니요, 0x4015B8 - 기본 주소와 진입 점이됩니다. 그러나 제가 언급했듯이, 그것은 여러분의 이미지가 * 선호 * 주소라고 말하는 것입니다; Windows는 다른 주소에서 코드를로드하기로 결정할 수 있습니다. – asveikau

+0

고마워. – Bootstrapper