热补丁

如何实现应用程序二进制补丁(冷补丁、热补丁、冷转热补丁,装备补丁)

https://blog.csdn.net/dodonei/article/details/76220607

 

vikasnkumar/hotpatch

https://github.com/vikasnkumar/hotpatch

 

Linux应用性能异常模拟及分析特征解析

https://blog.csdn.net/dodonei/article/details/80473585

 

必知必会-Hot Patch(热补丁)的两种方案

https://blog.csdn.net/dalerkd/article/details/78971171

 

Linux实现热补丁

https://blog.csdn.net/chrisnotfound/article/details/79099711

 

Linux查看动态库.so导出函数列表

https://blog.csdn.net/chrisnotfound/article/details/80662923

开源我的基于字节的数据补丁算法库HDiffPatch

https://blog.csdn.net/housisong/article/details/9003013

 

 

Linux热补丁的实现

96

https://www.jianshu.com/p/9269836e0bd6

 

如果要修改一个已经编译完成的可执行文件中某个函数的执行流程,有2种方式:

  • 通过设置LD_PRELOAD,但这种方式需要重启已经运行的可执行文件。
  • 通过修改可执行文件某个函数指向的地址,指向新的函数,这种方式可不重启已经运行的可执行文件。这里讨论第2种方式,即热补丁(hotpatch)。

要实现热补丁,有2种方式(如果有新方式,欢迎补充):

  • 在开发之初就让程序支持热补丁的加载,这种方式适合于拥有程序源码的情况。
  • 直接将热补丁打到可执行程序中,不依赖于程序的源码。

下面分别介绍下这2种方式的实现。

让程序支持热补丁

  1. 先在可执行文件中找到存储函数的的地址pRelocate(在程序的relocation section)
  2. 保存原始函数的地址pOriginal(即*pRelocation),此步可用于打补丁不成功后的恢复
  3. 加载补丁文件,加载时机下面讨论
  4. 加载补丁文件完成后,找到补丁文件中的函数地址pPatchFun
  5. 将存储的函数地址指向新的补丁函数,*pRelocation = pPatchFun至于第3步,实现的方式也有多种,可通过发信号、监控补丁配置文件变化(使用inotify)等。

更多请参考:Executable and Linkable FormatRedirecting functions in shared ELF libraries

直接打热补丁

  1. attach到目标进程(使用ptrace)
  2. 在进程中找到dlopen等函数的地址
  3. 在可执行文件中找到存储函数的的地址pRelocate
  4. 保存原始函数的地址pOriginal(即*pRelocation),此步可用于打补丁不成功后的恢复
  5. 通过dlopen将补丁文件加载到进程空间
  6. 加载补丁文件完成后,找到补丁文件中的函数地址pPatchFun
  7. 将存储的函数地址指向新的补丁函数,*pRelocation = pPatchFun此种方法比前一种方法多了前2步。

更多请参考:linux hotpatch

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值