當 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.
沒有留言:
張貼留言