Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 装配Fnstenv函数_Assembly - Fatal编程技术网

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]