2014. 6. 24. 13:58

시작 시점의 eax 값이 kernel32.BaseThreadInitTunk를 가리키는 현상

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 값은 "의미없다"라고 생각하면 되겠습니다.