社区
Linux/Unix社区
帖子详情
紧急求助:如何在应用程序运行的时候给程序打补丁?
长山互联网未来探索
2010-07-14 09:07:28
环境:Linux AS5.0
开发语言:c/c++
需求:在应用程序运行的时候,希望能够不停止应用程序,而对应用程序打补丁,从而改变应用程序的行为。
印象当中VxWorks系统是可以的,但是Linux下查了一天,没有找到。diff和patch是对源代码打补丁的,实现不了这个功能。
那位高手用过,指点一下。谢谢!!!
...全文
532
22
打赏
收藏
紧急求助:如何在应用程序运行的时候给程序打补丁?
环境:Linux AS5.0 开发语言:c/c++ 需求:在应用程序运行的时候,希望能够不停止应用程序,而对应用程序打补丁,从而改变应用程序的行为。 印象当中VxWorks系统是可以的,但是Linux下查了一天,没有找到。diff和patch是对源代码打补丁的,实现不了这个功能。 那位高手用过,指点一下。谢谢!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
x86
2010-07-19
打赏
举报
回复
所谓软件,包含几个部分:
1、二进制的执行代码,不包括动态库,也就是执行文件。执行后就装载到内存中,无法改变。
2、动态库,也就是.so文件,通过dlopen装载。这些文件可以动态替换,不过如果程序已经装载了该so文件,则必须通知(比如发信号)程序重新装载。
3、资源文件。如果程序已经打开,正在使用,则需要通知程序重新打开。否则直接替换即可。
如果补丁是针对源码的,你可以编译后,根据上面的原则替换对应文件,不过要保证编译参数跟运行中的版本一致。
另外,给进程发SIGCOUT信号也可以重启进程,不过进程同时也被打断了。
长山互联网未来探索
2010-07-19
打赏
举报
回复
我知道华为是可以的。
但不知道是怎么实现的
。
leo_dengzx
2010-07-14
打赏
举报
回复
我觉得难度还是很大的,但肯定是要使用动态库。
steptodream
2010-07-14
打赏
举报
回复
[Quote=引用 16 楼 pottichu 的回复:]
引用 14 楼 steptodream 的回复:
GNU的软件可以直接在VxWorks里用吗
不能, Vxworks 是一套 完全不同的体系, “应用程序”和内核驱动等是一体的。
说是应用程序,还不如说是内核的一个模块。
[/Quote]
太高深了
我在想 要是所有的系统 所有的软件都能很容易做成楼主说的那样
以后系统 软件升级打补丁 再也不用重启系统或者服务 那多好啊
pottichu
2010-07-14
打赏
举报
回复
[Quote=引用 14 楼 steptodream 的回复:]
GNU的软件可以直接在VxWorks里用吗
[/Quote]
不能, Vxworks 是一套 完全不同的体系, “应用程序”和内核驱动等是一体的。
说是应用程序,还不如说是内核的一个模块。
pottichu
2010-07-14
打赏
举报
回复
你可以看看这个。
http://www.dzjs.net/html/qianrushixitong/2007/0320/1770.html
steptodream
2010-07-14
打赏
举报
回复
GNU的软件可以直接在VxWorks里用吗
steptodream
2010-07-14
打赏
举报
回复
[Quote=引用 12 楼 pottichu 的回复:]
引用 2 楼 steptodream 的回复:
开发我不太会 但是我感觉这个可不可以 跟你程序自身的关系最大
印象当中VxWorks系统是可以的
------------------
你的印象是什么样的?
VxWorks 确实可以做到在线更新, 以前看到过这方面的文章,没有去实践。呵呵。
[/Quote]
我是想知道是什么样的效果
pottichu
2010-07-14
打赏
举报
回复
[Quote=引用 2 楼 steptodream 的回复:]
开发我不太会 但是我感觉这个可不可以 跟你程序自身的关系最大
印象当中VxWorks系统是可以的
------------------
你的印象是什么样的?
[/Quote]
VxWorks 确实可以做到在线更新, 以前看到过这方面的文章,没有去实践。呵呵。
pottichu
2010-07-14
打赏
举报
回复
用 dlopen, dlclose. 是可以实现动态加载和卸载动态库的。
但是动态更新模块对程序的设计要求比较高,简单点说就是要动态库提供的接口尽量简单,功能尽量独立,
当模块被卸载的时候, 主程序要能缓存 需要 被卸载模块去处理的数据。
pengsixiang
2010-07-14
打赏
举报
回复
Coder_Granger提到的通过SIGINT信号,这个信号是通知程序重新加载so还是通知程序重新初始化呢?如果是程序重新初始化的话,可能还是无法实现楼主的要求,因为程序的存储空间及地址都被重新分配了,已有的数据也就没有意义了。跟重启程序似乎没有区别了,那使用so的作用不就没有表现出来了。
qiyu1988
2010-07-14
打赏
举报
回复
程序sleep下再调用?
Coder_Granger
2010-07-14
打赏
举报
回复
[Quote=引用 7 楼 pengsixiang 的回复:]
引用 6 楼 cceczjxy 的回复:
引用 4 楼 hittlle 的回复:
我有一个思路, 就是利用动态库;补丁什么的,就是替换动态库,然后重新加载就行;比如,如查程序中用到libabc.so, 我替换掉libabc.so之后, 向程序发一个信息,告诉它有库更新了;它可以重新载入这个.要不用用dlopen?
可以,不过,要补充一点,你需要先释放掉动态库的函数后,才能替……
[/Quote]
一般通过SIGINT信号
pengsixiang
2010-07-14
打赏
举报
回复
[Quote=引用 6 楼 cceczjxy 的回复:]
引用 4 楼 hittlle 的回复:
我有一个思路, 就是利用动态库;补丁什么的,就是替换动态库,然后重新加载就行;比如,如查程序中用到libabc.so, 我替换掉libabc.so之后, 向程序发一个信息,告诉它有库更新了;它可以重新载入这个.要不用用dlopen?
可以,不过,要补充一点,你需要先释放掉动态库的函数后,才能替换动态库
[/Quote]
要怎么通知一个程序释放掉他加载的动态库的函数呢?有什么方法吗?
cceczjxy
2010-07-14
打赏
举报
回复
[Quote=引用 4 楼 hittlle 的回复:]
我有一个思路, 就是利用动态库;补丁什么的,就是替换动态库,然后重新加载就行;比如,如查程序中用到libabc.so, 我替换掉libabc.so之后, 向程序发一个信息,告诉它有库更新了;它可以重新载入这个.要不用用dlopen?
[/Quote]
可以,不过,要补充一点,你需要先释放掉动态库的函数后,才能替换动态库
pengsixiang
2010-07-14
打赏
举报
回复
动态库的加载也是在程序启动时就加载的,而不是在使用到函数的时候才去加载的,所以怕也无法实现楼主的要求的。
hittlle
2010-07-14
打赏
举报
回复
我有一个思路, 就是利用动态库;补丁什么的,就是替换动态库,然后重新加载就行;比如,如查程序中用到libabc.so, 我替换掉libabc.so之后, 向程序发一个信息,告诉它有库更新了;它可以重新载入这个.要不用用dlopen?
pengsixiang
2010-07-14
打赏
举报
回复
对原代码打完补丁后,编译链接,然后重启应用程序就可以了。如果需要热替换,似乎还没有见到过。
steptodream
2010-07-14
打赏
举报
回复
开发我不太会 但是我感觉这个可不可以 跟你程序自身的关系最大
印象当中VxWorks系统是可以的
------------------
你的印象是什么样的?
Coder_Granger
2010-07-14
打赏
举报
回复
这需要应用程序自身的支持
加载更多回复(2)
PyQt5快速开发串口工具
本课程采用项目驱动的方式直接学习PyQt5,在完成一款串口工具的制作过程中,由浅入深的学习PyQt5,学完本课程后,同学们可以尝试自己设计属于自己的上位机工具。 为什么本课程采用项目驱动方式开发? 本人大学时期的时候,曾经为了学习上位机,花了一暑假死磕了VC++6.0的上位机开发教程,一点一点的敲图书馆借的VC++相关书籍,后来并没有真正运用在实际项目上,颇为可惜;此外,工作以来,有一次,领导
紧急
受命,使用PyQt开发一款工厂产测使用的上位机工具,这时候,没有足够的时间一点一点的学习。 因此,本文力争从项目角度入手,通过开发一款串口工具,带领大家走进PyQt5的世界,为了加快开发技术,页面布局,我们直接使用Qt Designer进行设计,几乎不需要写任何代码就可以开发一款使用的串口工具,我们为本项目设计的界面如下所示:
阅读《提问的智慧》笔记
一种推荐的提问方式如下: 我在xxx的时候遇到了xxx的错误. 这个错误可以通过以下步骤重现: (描述具体的现象) 1. 我的系统版本是xxx, 相关的工具版本是xxx 2. 我做了xxx (必要的时候贴个图) 3. 然后xxx (必要的时候贴个图) ... 为了排查这个错误, 我进行了以下尝试: (说明我很希望可以解决问题, 真的没办法才提问的) 1. 我做了xxx, 出现了xxx的结果...
计算机应用精华系统性整理
让驱动
程序
签名警告不再弹出 文章分类:操作系统 正文如下: 在Windows 2000/XP中,通常我们在安装设备的驱动
程序
时,系统都会检查该驱动
程序
是否通过了微软的签名
注册表知识与技巧大全
注册表基础: ********系统文件夹:********* 名称路径 含义 AppData C:\Windows\Application Data
应用
程序
Cache C:\Windows\Temporary Internet Files 浏览器缓存 Cookies C:\Windows\Cookies Desktop Desktop 桌面 Favorites Favor
RASP技术进阶系列(三):重大漏洞自动化热修复
本篇主要介绍在应急响应过程中RASP如何加快工作流程并为重大漏洞
紧急
修复争取宝贵时间。
Linux/Unix社区
23,121
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章