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
C 需要有关x86程序集的帮助吗_C_Assembly_X86 - Fatal编程技术网

C 需要有关x86程序集的帮助吗

C 需要有关x86程序集的帮助吗,c,assembly,x86,C,Assembly,X86,字节030h做什么 有关此宏在中使用的其他信息,请参见 MODRM_EAX_06 MACRO ;/* [EAX], with reg/opcode: /6 */ BYTE 030h ENDM 我只是想了解宏在以下代码中的作用?看起来他们正在使用它生成指令,这是指令的一部分。查看(我猜是OP询问的代码),vmx_ptrld也是一个宏,所以 void vmxPtrld(u64 addr) VmxPtrld PROC StdCall _addr_low,_addr_high

字节030h做什么

有关此宏在中使用的其他信息,请参见

MODRM_EAX_06 MACRO   ;/* [EAX], with reg/opcode: /6 */ 
    BYTE    030h 
ENDM 

我只是想了解宏在以下代码中的作用?

看起来他们正在使用它生成指令,这是指令的一部分。

查看(我猜是OP询问的代码),
vmx_ptrld
也是一个宏,所以

void vmxPtrld(u64 addr) 
VmxPtrld PROC StdCall _addr_low,_addr_high 
mov eax,8 
add eax,ebp 
vmx_ptrld 
MODRM_EAX_06 
ret 
VmxPtrld ENDP 
是一条指令,
MODRM_EAX_06
是该指令的数据


理由:bluepill是一种用于虚拟化的PoC漏洞。在编写时,显然所使用的汇编程序还不支持与虚拟化相关的指令,因此它们是通过宏进行内联编码的。

许多操作码后面都有一个ModR/M字节,该字节分为3部分:前两位是“Mod”,后三位是“Reg”,后三位是“R/M”

“Mod”和“R/M”部分的组合指定寄存器和寻址模式;“Reg”部分可以指定另一个寄存器,或者在某些情况下,可以指定操作码的进一步扩展

在本例中,ModR/M字节如下所示:

vmx_ptrld
MODRM_EAX_06
大概这样写是为了让那些不理解(相对较新的)VMX指令的老汇编程序受益

0 0 1 1 0 0 0 0 \_/ \___/ \___/ Mod Reg R/M
mov eax,8 
add eax,ebp 
vmptrld [eax]
ret