2011-05-17 57 views
3

一旦Windows將可執行文件加載到內存中並將執行轉移到入口點,那麼寄存器和堆棧中的值是否有意義?如果是這樣,我可以在哪裏找到關於它的更多信息?Windows初始執行上下文

回答

6

正式地,PE文件入口點的寄存器沒有定義的值。您應該使用API​​,例如​​來檢索您需要的信息。但是,由於最終將控制權轉移到入口點的內核功能並沒有太大改變,所以一些PE包裝商和惡意軟件開始依賴其特性。兩個或多或少可靠寄存器是:

  • EAX指向應用程序的入口點(因爲內核函數使用call eax跳轉到它)

  • EBX指向進程環境塊( PEB)。

+0

良好的信息,但你知道任何關於x64? – ST3 2016-12-19 09:40:18

+0

@ ST3不,但您可以檢查調試器。 – 2016-12-19 09:56:25

+0

好的,但有一個問題,你確定'EAX'指向'EP'嗎?我在我的機器上看到了'CALL EDX'。 – ST3 2016-12-19 10:45:56

1

Windows Internals第5版第5章詳細介紹了Windows創建過程的機制。這將爲您提供更多有關Windows在內存中加載可執行文件並將執行轉移到入口點的信息。

我發現了這個最新的參考資料,它涵蓋了各種操作系統和各種編譯器在各種調用約定中如何使用寄存器。這是非常詳細的,似乎全面: Agner Fog's Calling Conventions document

+1

鏈接已損壞。我認爲這是它:http://www.agner.org/optimize/calling_conventions.pdf – aalku 2015-06-25 12:55:04