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全局变量?

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

有事者,事竟成;破釜沉舟,百二秦关终归楚;苦心人,

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

相关文章:

你感兴趣的文章:

标签云: