当前位置: 技术问答>linux和unix
问一个liunx汇编问题
来源: 互联网 发布时间:2017-03-10
本文导语: static inline void __vmptrld(u64 addr) { asm volatile ( VMPTRLD_OPCODE MODRM_EAX_06 /* CF==1 or ZF==1 --> crash (ud2) */ "ja 1f ; ud2 ; 1:n" ...
static inline void __vmptrld(u64 addr)
{
asm volatile ( VMPTRLD_OPCODE
MODRM_EAX_06
/* CF==1 or ZF==1 --> crash (ud2) */
"ja 1f ; ud2 ; 1:n"
:
: "a" (&addr)
: "memory");
}
static inline unsigned long __vmread_safe(unsigned long field, int *error)
{
unsigned long ecx;
asm volatile ( VMREAD_OPCODE
MODRM_EAX_ECX
/* CF==1 or ZF==1 --> rc = -1 */
"setna %b0 ; neg %0"
: "=q" (*error), "=c" (ecx)
: "0" (0), "a" (field)
: "memory");
return ecx;
}
这两个函数谁能解释一下什么意思???主要是反汇编的语法。。。。
其中
#define VMPTRLD_OPCODE ".byte 0x0f,0xc7n" /* reg/opcode: /6 */
#define MODRM_EAX_06 ".byte 0x30n" /* [EAX], with reg/opcode: /6 */
windows 下的反汇编问题不大,但是linux和windows反汇编不一样。。。
有没有这方面的文档?
非常之感谢
{
asm volatile ( VMPTRLD_OPCODE
MODRM_EAX_06
/* CF==1 or ZF==1 --> crash (ud2) */
"ja 1f ; ud2 ; 1:n"
:
: "a" (&addr)
: "memory");
}
static inline unsigned long __vmread_safe(unsigned long field, int *error)
{
unsigned long ecx;
asm volatile ( VMREAD_OPCODE
MODRM_EAX_ECX
/* CF==1 or ZF==1 --> rc = -1 */
"setna %b0 ; neg %0"
: "=q" (*error), "=c" (ecx)
: "0" (0), "a" (field)
: "memory");
return ecx;
}
这两个函数谁能解释一下什么意思???主要是反汇编的语法。。。。
其中
#define VMPTRLD_OPCODE ".byte 0x0f,0xc7n" /* reg/opcode: /6 */
#define MODRM_EAX_06 ".byte 0x30n" /* [EAX], with reg/opcode: /6 */
windows 下的反汇编问题不大,但是linux和windows反汇编不一样。。。
有没有这方面的文档?
非常之感谢
|
AT&T assembly syntax
gcc inline assembly
查一下这两方面的资料,你就可以看懂了。
gcc inline assembly
查一下这两方面的资料,你就可以看懂了。