装配Fnstenv功能

时间:2017-03-05 17:48:51

标签: assembly

我是装配新手并​​遇到了这段代码:

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

我无法在网上找到'fnstenv'的明确解释,任何人都可以在此背景下解释它吗?运行此程序后,eax的价值是多少?

2 个答案:

答案 0 :(得分:1)

mov eax, [esi+0xc]

由于您正在从保存的环境中读取完整的双字,因此可以合理地断定您使用的是fnstenv指令的32位保护模式格式。

这意味着您将获得 FPU指令偏移,它在状态图像中保存在偏移12处。

EAX寄存器将保存fldz指令的地址,因为这是FPU执行的最后一条非控制指令。

答案 1 :(得分:0)

正如Sep Roland所解释的那样,这段代码用寄存器eax填充指令fldz所在的存储器地址。 这是获取当前指令指针的黑客技巧; shellcode中有价值的信息。 您的代码段可能是exploit的一部分。

来源:Daniele Bellavista's Blog