当前位置: 代码迷 >> 汇编语言 >> LINUX 汇编和 windows 汇编
  详细解决方案

LINUX 汇编和 windows 汇编

热度:595   发布时间:2016-05-02 04:33:59.0
LINUX 汇编和 windows 汇编 求助!
以下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下的写法!谢谢。
------解决方案--------------------
本帖最后由 mydo 于 2014-06-20 07:42:54 编辑
引用:
以下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逐字节嵌入。
  相关解决方案