当前位置:   article > 正文

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/160515
推荐阅读
相关标签
  

闽ICP备14008679号