C 需要有关x86程序集的帮助吗
字节030h做什么 有关此宏在中使用的其他信息,请参见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
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