以下code是linux下的:
asm volatile (
"test %1,%1 ; jz 1f ; ud2a ; .ascii \"xen\" ; 1: cpuid"
: "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
: "0" (idx), "1" (pv_context) );
有高手可否给讲解下含义? 顺便求windows下的写法!谢谢。
------解决方案--------------------
首先检查pv_context是否为NULL,也就是 test %ebx,%ebx,如果真则跳到cpuid指令,
检测cpu类型,否则产生一个opcode异常.
在内联汇编中嵌入了字符串"xen",可能是以某种方式返回一个在Xen虚拟机中运行的
含义,因为字符串地址紧贴在异常指令后,可以进行定位.不过这只是猜测,你没有其他代码啊.
------解决方案--------------------
ud2a就是一条ud2指令(0F 0B),触发ex6异常。后面的.ascii \"xen\"就是嵌入3字节。
大致是这样:
ud2
db 78h, 65h, 6eh
某些编译器不支持db,可以用__emit逐字节嵌入。