Assembly 装配Fnstenv函数
我是汇编新手,遇到了以下代码:Assembly 装配Fnstenv函数,assembly,Assembly,我是汇编新手,遇到了以下代码: nop fldz fnstenv[esi] mov eax, [esi+0xc] 我在网上找不到关于“fnstenv”的清晰解释,有人能在这种情况下解释吗?运行此程序后,eax的值是多少 由于您正在从保存的环境中读取完整的dword,因此可以得出这样的结论:您使用的是fnstenv指令的32位保护模式格式 这意味着您将获得FPU指令指针偏移量,该偏移量保存在状态映像的偏移量12处 EAX寄存器将保存fldz指令的地址,因为这是FPU执行的最后一条非控制指令。正如
nop
fldz
fnstenv[esi]
mov eax, [esi+0xc]
我在网上找不到关于“fnstenv”的清晰解释,有人能在这种情况下解释吗?运行此程序后,eax的值是多少
由于您正在从保存的环境中读取完整的dword,因此可以得出这样的结论:您使用的是fnstenv
指令的32位保护模式格式
这意味着您将获得FPU指令指针偏移量,该偏移量保存在状态映像的偏移量12处
EAX
寄存器将保存fldz
指令的地址,因为这是FPU执行的最后一条非控制指令。正如Sep Roland所解释的,这段代码用指令fldz
所在的内存地址填充寄存器EAX
。
获取当前指令指针是黑客的伎俩;一条有价值的信息。
您的代码片段很可能是应用程序的一部分
资料来源:。不知道你找了哪里。请参阅“英特尔64和IA-32体系结构软件开发人员手册”第1卷:基本体系结构中的第8.1.10节“使用FSTENV/FNSTENV和FSAVE/FNSAVE保存x87 FPU的状态”
mov eax, [esi+0xc]