社区
Linux/Unix社区
帖子详情
.so的动态卸载与替换问题
spymin812
2010-12-25 07:27:24
加精
一个正在运行的程序调用了一个.so文件,现在要用有新的.so替换旧的.so文件,在不关闭程序的情况下,如何替换
就是如何动态的卸载旧库并替换为新库加载,中途不关闭程序
...全文
3396
46
打赏
收藏
.so的动态卸载与替换问题
一个正在运行的程序调用了一个.so文件,现在要用有新的.so替换旧的.so文件,在不关闭程序的情况下,如何替换 就是如何动态的卸载旧库并替换为新库加载,中途不关闭程序
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
46 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
okbaozhen
2012-01-03
打赏
举报
回复
没看明白
fytzzh
2011-03-29
打赏
举报
回复
当然需要一些通知机制有些的so可以动态加载。
这就涉及到进程间通讯
一般可以选择使用:
信号
套接字 (如果仅仅是本地可以选择域套接字)
管道
等
只要能进程间通讯都可以
fytzzh
2011-03-29
打赏
举报
回复
ganjianh8 正解
ketao_78
2011-03-21
打赏
举报
回复
为啥要这么做
ecsape
2011-01-04
打赏
举报
回复
有趣的帖子,收藏了。
只是觉得inotify_init(),inotify_add_watch()好像有点浪费。可以用管道通讯,socket等方式在.so改变时通知程序更换。
dungeonsnd
2011-01-02
打赏
举报
回复
[Quote=引用 27 楼 feiyinzilgd 的回复:]
引用 26 楼 hzy_76 的回复:
明白了,谢谢feiyinzilgd。但不知是什么机制和函数呢?
inotify_init()
inotify_add_watch()
对特定的路径文件进行监控。当发生了变化会发送一个notify event.
这样。。
再使用一个select。就可以知道文件是否发生了改变。。。
[/Quote]
这样应该对性能有影响吧。
因为这一事件发生的次数非常少,浪费了不必要的CPU时间。
kingstarer
2011-01-01
打赏
举报
回复
重新dlopen就行了
通知程序更新方法有很多 可以通过自动比较文件修改时间 也可能通过手工发送信号通知程序
DACE2012
2010-12-31
打赏
举报
回复
这个方法好,回去试试
ZHU1113
2010-12-31
打赏
举报
回复
不明白!!!
nilite
2010-12-31
打赏
举报
回复
太奇怪了,我找遍Glibc的手册和linux kernel API手册,都没有找到这两个函数,但是可以man到,也可以在我的libc下面找到相关的头文件,27楼,请告诉我,我平时该从何处获得这些函数?
[Quote=引用 27 楼 feiyinzilgd 的回复:]
引用 26 楼 hzy_76 的回复:
明白了,谢谢feiyinzilgd。但不知是什么机制和函数呢?
inotify_init()
inotify_add_watch()
对特定的路径文件进行监控。当发生了变化会发送一个notify event.
这样。。
再使用一个select。就可以知道文件是否发生了改变。。。
[/Quote]
nilite
2010-12-31
打赏
举报
回复
我想问一下23楼,要看哪方面的资料,才能了解这些系统调用,怎么我翻glibc的手册,根本找不到这两个函数,但是man一下还是有的。
[Quote=引用 23 楼 feiyinzilgd 的回复:]
引用 15 楼 hzy_76 的回复:
有一个思路不知道Linux下是否可行,如果文件系统在文件替换时能发出中断信号,并允许程序进行干预的话,可以不用这个办法。但就我目前的水平,只能这么做。
引用 11 楼 feiyinzilgd 的回复:
引用 9 楼 hzy_76 的回复:
我觉得应该没问题,但需要程序控制,当需要更新.so文件时,等待所有调用结束后,dlclose,然后替换……
[/Quote]
arkor
2010-12-30
打赏
举报
回复
楼上已经回答了。
冷卡卡西
2010-12-29
打赏
举报
回复
参考下这个:
http://blog.163.com/xychenbaihu@yeah/blog/static/132229655201011209823241/
冷卡卡西
2010-12-29
打赏
举报
回复
[Quote=引用 27 楼 feiyinzilgd 的回复:]
引用 26 楼 hzy_76 的回复:
明白了,谢谢feiyinzilgd。但不知是什么机制和函数呢?
inotify_init()
inotify_add_watch()
对特定的路径文件进行监控。当发生了变化会发送一个notify event.
这样。。
再使用一个select。就可以知道文件是否发生了改变。。。
[/Quote]
这个方法妙。。。。
cnlm2
2010-12-29
打赏
举报
回复
dlclose
dlopen
南极星0628
2010-12-28
打赏
举报
回复
必须动态调入.so,这样直接换文件,程序重新读入即可
aguang423
2010-12-28
打赏
举报
回复
楼上正解
谭海燕
2010-12-28
打赏
举报
回复
[Quote=引用 15 楼 hzy_76 的回复:]
有一个思路不知道Linux下是否可行,如果文件系统在文件替换时能发出中断信号,并允许程序进行干预的话,可以不用这个办法。但就我目前的水平,只能这么做。
引用 11 楼 feiyinzilgd 的回复:
引用 9 楼 hzy_76 的回复:
我觉得应该没问题,但需要程序控制,当需要更新.so文件时,等待所有调用结束后,dlclose,然后替换,然后再重新dlopen。
这个方法……
[/Quote]
是的。你可以监视文件系统。 2.6内核目前已经提供了相关的函数和机制让你来监视文件系统的变化。
jiminlan521
2010-12-28
打赏
举报
回复
好资料,收藏一下。
dxh7281371
2010-12-28
打赏
举报
回复
不错的东西
加载更多回复(12)
Android so的热升级尝试
主要介绍了Android so的热升级尝试的相关知识,非常不错,具有参考借鉴价值,需要的朋友可以参考下
hookso:linux
动态
链接库的注入修改查找工具 A tool for injection, modification and search of linux dynamic link library
hookso hookso是一个linux
动态
链接库的注入修改查找工具,用来修改其他进程的
动态
链接库行为。 功能 让某个进程执行系统调用 让某个进程执行.so的某个函数 给某个进程挂接新的.so
卸载
某个进程的.so 把旧.so的函数或某个地址
替换
为新.so的函数 复原.so的函数或某个地址的
替换
查找.so的函数地址 查看.so的函数参数,或某个地址的函数参数 当执行.so的某个函数时或某个地址的函数时,触发执行新的函数 编译 git clone代码,运行脚本,生成hookso以及测试程序 # ./build.sh # cd test && ./build.sh 示例 启动test目录下的测试程序 先看下测试代码,代码很简单,test.cpp不停的调用libtest.so的libtest函数 int n = 0; while (1) { if (libtest(n++)) {
【救援过程】升级openssl导致libcrypto.so.1.1
动态
库不可用
编译打包openssl-1.1.1k并给服务器升级,由于1.1.1k版本的libcrypto.so.1.1
动态
库与1.1.1g版本的不同,导致有依赖的命令均不能正常使用。 不建议自行升级openssl到1.1.1k,特别是不要
替换
libcrypto.so.1.1
动态
库。 yum、rpm命令也依赖libcrypto.so库,在救援模式下调用yum、rpm
卸载
openssl-1.1.1k也不可能。 最终提取openssl-1.1.1g归档文件,在救援模式下覆盖到相应目录,解决这个故障。 记录过程。
CUDA与cuDNN在linux / Ubuntu22.04上的安装与
卸载
,包含CUDA的.run安装与.deb安装,cuDNN的.tar安装与.deb安装
主要关注CUDA与cuDNN在linux / Ubuntu22.04上的安装与
卸载
。 1. 整合了两种CUDA安装方式(.run与.deb)、两种cuDNN的安装方式(.tar.xz与.deb),网上好像没什么人做这个 2. 整合了CUDA与cuDNN的官方样例代码的测试方法 3. 整合了CUDA与cuDNN的版本切换方法,尤其是完善的使用脚本的一键切换版本方法(部分代码由GPT辅助生成) 4. 整合了CUDA与cuDNN的彻底
卸载
方法
linux 子进程hook,hookso: hookso是一个Linux
动态
链接库的注入修改查找工具,用来修改其他进程的
动态
链接库行为...
hooksohookso是一个linux
动态
链接库的注入修改查找工具,用来修改其他进程的
动态
链接库行为。功能让某个进程执行系统调用让某个进程执行.so的某个函数给某个进程挂接新的.so
卸载
某个进程的.so把旧.so的函数
替换
为新.so的函数复原.so的函数
替换
查找.so的函数地址编译git clone代码,运行脚本,生成hookso以及测试程序# ./build.sh# cd test &...
Linux/Unix社区
23,216
社区成员
74,539
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章