2014年4月21日 星期一

Windows PE 執行檔的 OEP 是如何被呼叫的

當 CreateProcess 被呼叫之後,最後會呼叫到 NtCreateProcess 進入 kernel mode.
kernel 幫我們建立進程需要的核心物件和初始化進程內部的物件例如 PEB 等等.

然後建立該進程第一個 thread 也就是 main thread, 同時也會建立與之相關的 thread context
context 中有兩個重要的 register -- eax 和 eip

eip 會設定成 BaseProcessStartThunk
eax 會設定成 OEP

呼叫流程如下
BaseProcessStartThunk --> BaseProcessStart --> OEP

所以事實上, 一個進程中 user mode 第一個被執行到的 code 是 BaseProcessStartThunk.


沒有留言:

張貼留言