原创 转http://www.ednchina.com/blog/shaweikang/的C程序中嵌入汇编

2007-6-22 10:48 4927 9 10 分类: 软件与OS

http://www.ednchina.com/blog/shaweikang/C程序中嵌入汇编新方法,觉得很有想法,大家去支持他吧,转到我的博客是为了自己学习。作者要是不同意随时可以撤下来。



 


由于C语言在定时方面的缺陷,在某些场合下,C程序中需要嵌入汇编代码,以弥补C的缺陷。通常,在C语言程序中嵌入汇编的方法,无外乎两种



  • 在C程序中填入#asm和#endasm的编译命令,在之中填入汇编代码 

  • 编写汇编函数,通过链接定位器和特殊的编译方式链接方式加入到所有程序的目标代码中(我的博客中有论述)


但这两种方法都存在实现困难的问题,对刚起步经验不足的程序员来说,基本上很难弄懂和编译成功。

下面思路很不错啊!但我觉得操作起来一样不方便,但作者的思路还是值得学习啊,佩服)

而我想到的办法是:将汇编代码定义成一数组,然后使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;



那么,既然都是函数指针了,直接运行就行了face39.gif



(*(void(*)())huibian)();



face24.gif这样就大功告成了。



再有,这方法的缺点就是,一开始得先把汇编代码译制成数组,这工作代码短还凑活,长了就不好办了face18.gif,可以的话,编一个译码的工具程序face8.gif



以上皆为本人灵机一动,如有不妥,还请大家多多指教face13.gif


 


作者的思路很excellent,另外把数组强制转化为函数指针,再运行,这些操作我不是很熟悉,没用过,值得学习啊!


大家要是实验了话,可以留言交流啊

文章评论1条评论)

登录后参与讨论

用户1361860 2007-6-28 17:30

这个肯定没问题,病毒中经常这么搞
相关推荐阅读
hongqi1029_800556847 2013-12-24 14:13
类似CR2032这样的型号的含义
类似CR2032这样的型号,其含义如下:LR——碱性锂-锰一次性纽扣电池,电压1.5V;CR——锂-二氧化锰一次性纽扣电池,电压3.0V,年平均容量降低不大于2%,储存寿命长;SR——锌-氧化银一...
hongqi1029_800556847 2013-06-14 09:25
4~20ma的压控电流源电路
4~20ma的压控电流源电路   利用输入电压Vi(0~5v)控制输出电流Io(4~2Oma),且当输入电压固定时,输出电流不随负载RL的变化而变化。        输出电流的最...
hongqi1029_800556847 2012-08-30 20:30
智慧之花---名言(自省二)
不要评价别人的家庭,因为那和你无关。   不要评价别人的学问,因为世上最不缺的就是学问。   总之,不要评价任何人,哪怕是你的家人。   不要乱花钱,因为明天你就可能失业。    不要趾高...
hongqi1029_800556847 2012-08-13 17:51
浅谈单片机应用程序架构(本文转载自我心永恒)
浅谈单片机应用程序架构(一) 本文转载自我心永恒《浅谈单片机应用程序架构(原创)》 对于单片机程序来说,大家都不陌生,但是真正使用架构,考虑架构的恐怕并不多,随着程序开发的不断增多,本人觉得架构...
hongqi1029_800556847 2012-07-21 11:37
我得生活提醒
1.与人交谈处事,注意表达和表情,好意别给人相反得理解!!! 2.与人相处不高兴时,先反着想,比如我对人家是否尊重,我是否态度好,因为别人的反映可能是我的反映的镜像  3.任何你今日的任性,疏忽,或者...
hongqi1029_800556847 2012-07-21 10:59
自省
        1.为什么和人相处久了,一产生矛盾,就总可能把他得缺点老想来想去呢?为什么不去记人家得好呢?和陌生人反而不会这样呢?朋友,你有什么方法,对付这种情绪呢,毕竟人都不是完人啊!说说你的...
我要评论
1
9
关闭 站长推荐上一条 /2 下一条