linux 下C程序热补丁技术的原理和实现——要求

上半年做运营商的一个项目,设备规范是中兴华为这些大厂商写的,其中有关于热补丁的要求。运营商对设备运行时间要求很高,不会让更改一个小小的问题都要重启程序。所以就有了热补丁要求:要求程序在运行过程中能够更改程序的行为。

关于linux下热补丁的实现资料不多,我只找到一个:http://www.cnblogs.com/WuCountry/archive/2010/02/22/1671537.html

这里面有一个大致的实现可以参考,但是还要解决一些问题。我会写几篇文章,记录一下这次开发过程,也算做个总结。

先说一下要求:

1、要能够在程序运行过程中更改程序的行为。

程序运行过程中是加载到内存中的,要更改程序的行为,就要更改进程的内存。我这里使用的ptrace函数。

2、新的程序行为如何动态加入到进程内存中。

新的程序以动态链接库的形式加载到内存中。有两种加载方法,一是在进程中开辟一段内存,然后将动态链接库加载到这段内存中;而是使用系统函数dlopen将动态链接库加载到程序进程中。

3、如何把函数的行为替换为新的行为。

使用bfd库找到需要替换的函数地址,以及新的函数地址,然后把原有函数起始内存更改为JMP命令加新的函数地址。

4、如果需要更改的函数是static函数,是否可以通过这种方式更改?

5、新的函数如何调用原有进程中的其他函数?如何访问原有的全局变量?如何访问static类型函数以及static全局变量?

后面会详细说明这些内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值