2014. 6. 24. 13:58
시작 시점의 eax 값이 kernel32.BaseThreadInitTunk를 가리키는 현상
2014. 6. 24. 13:58 in reverse engineering
notepad.exe를 ollydbg로 디버깅하면, 다음과 같이 시작됩니다.
위 화면의 붉은 박스를 보면, notepad.exe의 entry point 단계, 즉, 시작 싯점의 eax register의 값이 kernel32.BaseThreadInitThunk 값을 가르기고 있습니다.
물론, 초창기의 eax 값은 의미가 없을 수 도 있는데, notepad.exe 이외에 다른 .exe들의 시작 eax 값은 동일하게 kernel32.BaseThreadInitThunk로 표기되어 혹시 "해당 값이 의미"가 있는지 궁금해지기도 했습니다.
그런데,
와 같이 notepad.exe의 IAT에는 kernel32.dll의 BaseThreadInitThunk가 포함되지 않습니다. 그래서, 상식적으로 시작싯점에 즉, 순수한 IAT에 의해서는 해당 함수를 실행될 수 없는 노릇입니다.
그러나 이러한 것은 우연의 일치로, 위 OS에 따라 다르다는것이 확인되었습니다.
즉, 위 현상은 Windows 7에서 발생한 것인데, XP에서는 아래와 같이 시작 eax 값은 0으로 초기화되어 있습니다.
즉, 초기 eax 값은 "의미없다"라고 생각하면 되겠습니다.
'reverse engineering' 카테고리의 다른 글
VirtualSize와 SizeOfRawData 차이점? (0) | 2014.07.16 |
---|---|
PE 파일을 disassembly하여 CALL 명령에 연결된 Win32 API 찾기 (IAT, Import Address Table) (0) | 2014.06.25 |