免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2395 | 回复: 7
打印 上一主题 下一主题

[C] LINUX 汇编和 windows 汇编 求助! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-06-19 18:26 |只看该作者 |倒序浏览
以下code是linux下的:
  1. asm volatile (
  2.         "test %1,%1 ; jz 1f ; ud2a ; .ascii \"xen\" ; 1: cpuid"
  3.         : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx)
  4.         : "0" (idx), "1" (pv_context) );
复制代码
有高手可否给讲解下含义? 顺便求windows下的写法!谢谢。

论坛徽章:
7
2015年亚洲杯之约旦
日期:2015-03-05 17:03:522015亚冠之山东鲁能
日期:2015-09-29 13:01:2115-16赛季CBA联赛之四川
日期:2016-01-18 15:47:0215-16赛季CBA联赛之广夏
日期:2016-02-24 11:47:1515-16赛季CBA联赛之辽宁
日期:2016-11-01 09:45:4115-16赛季CBA联赛之青岛
日期:2017-02-15 10:02:182016科比退役纪念章
日期:2017-02-16 17:25:35
2 [报告]
发表于 2014-06-20 09:12 |只看该作者
这是嵌入式汇编吧,
"test %1,%1 ; jz 1f ; ud2a ; .ascii \"xen\" ; 1: cpuid"这是汇编语句,具体实现相应的功能。
: "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx) 这是输入,即将数据写到相应的寄存器去, eax的值放到寄存器eax中,ebx的值放到寄存器ebx中。。。。。
: "0" (idx), "1" (pv_context) );这是输出吧。将寄存器eax中的值会写到idx中,寄存器ebx的值会写到pv_context中。

论坛徽章:
0
3 [报告]
发表于 2014-06-20 15:56 |只看该作者
linggang_123 发表于 2014-06-20 09:12
这是嵌入式汇编吧,
"test %1,%1 ; jz 1f ; ud2a ; .ascii \"xen\" ; 1: cpuid"这是汇编语句,具体实现相 ...


高人可否更详细指点一下!

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
4 [报告]
发表于 2014-06-20 16:14 |只看该作者
这个就只是使用CPUID而已,
CPUID是个复杂指令,
根据调用代码不同(在AH还是AX中)我忘了。
各个CPU的调用参数也不同。
而且Intel的CPU的CPUID根本就是TYPEID,
或只能叫CPUINFO。

所以, 还是用其它ID吧。
现在唯一可行的,能通用的用法是用网卡的ID。

论坛徽章:
0
5 [报告]
发表于 2014-06-20 16:48 |只看该作者
folklore 发表于 2014-06-20 16:14
这个就只是使用CPUID而已,
CPUID是个复杂指令,
根据调用代码不同(在AH还是AX中)我忘了。


大侠可否帮忙解释下ud2a ; .ascii \"xen\",这句是什么意思?对应在intel里的写法是啥?十分感谢!

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
6 [报告]
发表于 2014-06-20 17:35 |只看该作者
ud2a:
it hits a "ud2a" instruction emitted by gcc and promptly hits SIGILL.

.ascii \"xen\"
相当于
DS "xen"
不过,最新的MASM好像也支持ASCII了
就是在这里放一个字符串。
一般放在代码后面的没有名字的这种串是Signature,
就像硬盘分区表后面的结束字  0x55AA一样。
真的意义还要看具体代码。

论坛徽章:
0
7 [报告]
发表于 2014-06-20 17:39 |只看该作者
folklore 发表于 2014-06-20 17:35
ud2a:
it hits a "ud2a" instruction emitted by gcc and promptly hits SIGILL.


code来自https://github.com/avsm/xen-unst ... s/misc/xen-detect.c
ud2a ; .ascii \"xen\" ;这句在intel里应该怎么写呢?

论坛徽章:
0
8 [报告]
发表于 2014-06-23 10:43 |只看该作者
感谢大家的回复,大概写法应该是这样:
    ud2
    _emit 78h
    _emit 65h
    _emit 6eh
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP