免费注册 查看新帖 |

Chinaunix

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

大家讨论下C中嵌入汇编代码有哪些方法啊? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-08-12 14:46 |只看该作者 |倒序浏览
如题,谢谢!

论坛徽章:
0
2 [报告]
发表于 2008-08-12 18:03 |只看该作者
代码嵌入
模块嵌入

论坛徽章:
0
3 [报告]
发表于 2008-08-12 18:57 |只看该作者
很多编译器都有自己的扩展关键字

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2008-08-12 20:25 |只看该作者
原帖由 wangsheng0415 于 2008-8-12 14:46 发表
如题,谢谢!

使用编译器扩展,目前来说这是唯一的方法。

论坛徽章:
0
5 [报告]
发表于 2008-08-12 22:21 |只看该作者
模块嵌入也可以,不直接嵌入汇编

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2008-08-12 22:54 |只看该作者
关键部分,主要是考虑到效率的话,使用汇编。一般就是做一个函数,是C的函数接口,内部嵌入汇编语言实现。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2008-08-12 23:09 |只看该作者
原帖由 Godbach 于 2008-8-12 22:54 发表
关键部分,主要是考虑到效率的话,使用汇编。一般就是做一个函数,是C的函数接口,内部嵌入汇编语言实现。

这就不叫 C 中嵌入汇编了。

论坛徽章:
0
8 [报告]
发表于 2008-08-13 09:25 |只看该作者
以下是上网收到的,试了下不是很明白!
将汇编代码定义成一数组,然后使C程序以代码方式运行数组。其实,这就是我们所知的蠕虫病毒的原理。
具体方法是这样的,要知道,汇编代码其实也是一常数,8位CPU中,一句代码是用8位二进制表示,16位CPU中,一句代码是用16位二进制表示,所以,以51单片机(8位)为例,其一系列的汇编程序代码,在C程序中就是一个unsigned char类型的数组。那么,我们可以把想嵌入的汇编代码在C程序中定义成一个数组:
unsigned char code huibian[n]={……};
然后的问题就是如何启动它了。
我们知道,C语言中,无返回类型函数指针的定义为
void (*name_of_function )();
另外C语言中强制类型转换为
(type)variable;
所以,基于上面两个语句,我们就可以把huibian这个数组指针(数组名就是一指针)转化为函数指针
(void(*)())huibian;
那么,既然都是函数指针了,直接运行就行了
(*(void(*)())huibian)();
这样就大功告成了。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2008-08-13 09:32 |只看该作者
原帖由 MMMIX 于 2008-8-12 23:09 发表

这就不叫 C 中嵌入汇编了。



版主是什么意思呢?

偶在内核中就是看到有些函数就是C中嵌入汇编。主要是string.h中的函数。 形式就是C函数接口,里面_asm_,然后就是汇编语句,这样的方式不能称之为嵌入汇编吗

论坛徽章:
0
10 [报告]
发表于 2008-08-13 09:32 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP