2 min read

WINAPI INSTANCE란 도대체 무엇일까?

최근에 디버깅 관련해서 보고있습니다. 책중에서 winapi중에 INSTANCE이 값이 도대체 무엇인가 라는 답 하나를 찾았습니다.

결론부터 말하면 PE구조의 imagesBase + entry Point 값입니다

샘플코드는 VS에서 기본적으로 제공하는 Windows Project 코드입니다.

테스트 하기위해 아래에 randomized base address을 해제하겠습니다.

이 기능은 WIndows에서 Images Base 주소를 랜덤으로 해주는 기능입니다.

이 기능을 해제한후에 디버깅을 한뒤에 wWinMain의 인스턴스를 봐주시기 바랍니다.

해당 값은 0x008a0000이고 해당값을 메모리에서 찾아봅시다.

보시다 싶이 값을 보면 PE 이미지 시작지입니다. 이 값은 PE헤더에서 쉽게 구할수 있는데 PE헤더의 base image + Entry Point 값입니다.

여튼 INSTANCE값이 base image라는게 알았으니 메모리영역에서 코드영역도 찾을수있습니다.

Text영역의 RVA는 1000이며 VA는 base image + RVA 를 더하면 메모리상에 코드영역의 VA을 찾을수 있습니다.

이공식을 그대로 적용해보겠습니다. 400000 + 1000은 401000입니다.

디스 어셈에서 이값으로 주소를 이동합니다.

이값을 text와 비교해서 보시면 디스어셈하고 동일한걸 확인할수 있습니다.