您尚未登录。

#1 2015-01-30 11:09:55

atmouse
会员
注册时间: 2011-08-24
帖子: 701

还有个问题,关于计算已经载入内存的旧lib文件

一个lib.so已经被载入内存后,

archlinux系比如我更新了这个lib.so文件,这时候除非程序自己有重载lib的机制,不然通过pmap查看到的进程载入的lib还是旧版本。
这时候我想获得旧版lib.so文件应该如何做。 或者获取这个lib的哈希值也可以。

离线

#2 2015-01-30 13:06:28

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,953
个人网站

Re: 还有个问题,关于计算已经载入内存的旧lib文件

从 /proc/<pid>/maps 拿到 inode 号之后拿 debugfs 或者类似的手段把文件弄出来。

离线

#3 2015-01-30 13:33:01

atmouse
会员
注册时间: 2011-08-24
帖子: 701

Re: 还有个问题,关于计算已经载入内存的旧lib文件

类似的手段是什么手段?

最近编辑记录 atmouse (2015-01-30 13:35:32)

离线

#4 2015-01-30 13:45:55

atmouse
会员
注册时间: 2011-08-24
帖子: 701

Re: 还有个问题,关于计算已经载入内存的旧lib文件

对了, 这个inode 是保留inode么? inode所在的实际物理扇区不会被新写入的文件覆盖吧?

离线

#5 2015-01-30 13:51:42

依云
会员
所在地: a.k.a. 百合仙子
注册时间: 2011-08-21
帖子: 8,953
个人网站

Re: 还有个问题,关于计算已经载入内存的旧lib文件

atmouse 说:

对了, 这个inode 是保留inode么? inode所在的实际物理扇区不会被新写入的文件覆盖吧?

不会。只要文件还在被使用,整个文件都是安全的。

目测拿 debugfs link 不会增加 link count。你写个内核模块搞吧。

离线

#6 2015-01-30 13:55:22

atmouse
会员
注册时间: 2011-08-24
帖子: 701

Re: 还有个问题,关于计算已经载入内存的旧lib文件

好像没办法避免被覆盖的样子,通过inode 导出看来不靠谱, 还有maps左边的那段内存地址也不知道是不是完整的整个文件,估计只是所需要用的函数才导入内存

离线

#7 2015-01-30 13:58:18

atmouse
会员
注册时间: 2011-08-24
帖子: 701

Re: 还有个问题,关于计算已经载入内存的旧lib文件

能找下完全确认不会被覆盖的说明么?。 只是再写个内核模块感觉麻烦了,我是想,内存里面会不会有保存完整的整个文件(不确定会不会经过内核解析后变成其他数据? 我看内存地址也分了好几块)

最近编辑记录 atmouse (2015-01-30 13:59:51)

离线

页脚