2017-01-20 54 views

回答

1

call dword ds:[004000238h]間接近調用,它在004000238h閱讀DWORD的值,並用它來撥打電話。

請注意,方括號和dword ptr是確定指令類型的地方。由於指令的操作數是內存操作數,因此隱式地使用DS來讀取它(反彙編器使用段覆蓋語法顯示它)。

呼叫接近(保護模式下的遠程呼叫很少見,並且帶有特殊的語義),因此CS的當前值不會改變。
我們可以說CS是隱式使用的,因爲調用是相對於當前值CS而言的。

Intel manual 3描述了protected mode中的調用機制。作爲一個說明,即使對於32位系統,分段也被禁用(所有描述符都有基址爲零),所以你可以忘記選擇寄存器,但是對於TLS和SEH(通常使用fs/gs寄存器)。

+0

爲什麼我們需要導入地址表,即使在c中的靜態鏈接模塊中。我認爲IAT用於動態鏈接 –

+0

@ user7445340沒有一個具體的例子很難說,但Windows API主要是作爲用戶空間DLL實現的。 C運行時仍然需要加載像'user32'和'kernel32'這樣的庫。 –

相關問題