2017-03-05 18 views
-1

我是新來的組裝和整個這一段代碼來:大會Fnstenv功能

nop 
fldz 
fnstenv[esi] 
mov eax, [esi+0xc] 

我找不到「fnstenv」的一個明確的解釋網上,任何人都可以解釋它在這方面?運行此程序後,eax的價值是多少?

+2

不確定你在哪裏看。請參見_8.1.10在_Intel®64和IA-32架構中使用FSTENV/FNSTENV和FSAVE/FNSAVE_保存x87 FPU的狀態軟件開發人員指南第1卷:基本架構_ – Jester

回答

1
mov eax, [esi+0xc] 

既然你正在閱讀從保存的環境,一個完整的DWORD,它是唯一合乎邏輯的結論是,你正在使用的fnstenv指令的32位保護模式格式。

這意味着你將得到FPU指令指針偏移量,它被保存在狀態圖像的偏移12處。

EAX寄存器將保存fldz指令的地址,因爲這是FPU執行的最後一個非控制指令。

0

正如Sep Roland所解釋的那樣,這段代碼用指令fldz所在的內存地址填充寄存器eax。 獲取當前指令指針是一種黑客技巧;這是shellcode中有價值的信息。 您的代碼片段可能是exploit的一部分。

來源:Daniele Bellavista's Blog