首页
社区
课程
招聘
inline hook so
发表于: 2014-2-11 19:49 5429

inline hook so

2014-2-11 19:49
5429
小弟在做内联式(inline)hook的时候遇到了如下问题:
在linux下,我想hook  libc.so里面的puts函数,因为共享文件只被加载一次,公多进程之间共享的,于是只要把puts函数hook掉,就会先跳转执行我自己注入的函数,然后再返回执行puts函数,这样做虽然成功了,可是没有预期的效果,因为当我开启另外一个进程进行运行,调用puts函数的时候,那个进程并没有受到我hook的影响,所以不知道哪里出错了,还望好心人,大神们指点指点小弟,谢谢

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 1392
活跃值: (5207)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
2
虽然不懂linux但感觉应该和windows下一样为copy on write.你修改时,会复制一份副本专供你修改使用,不会影响到其他进程使用这个模块,否则的话就不会有进程隔离这个概念了
2014-2-11 21:07
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
大概能听懂你说的了,那这样的话,共享库并没有起到共享那种作用了啊,还会有一个副本,这个副本是保存在另一个进程的空间中吗,有那方面的资料吗,介绍点给我看看吧
2014-2-12 09:56
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
你hook 只是在进程的这个范围内有效。 新进程加载时是加载的原文件。 肯定就无效啊。
2014-2-12 09:59
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
按照linux下共享库的说法是,如果有一个A进程运行时加载了一个共享库libc.so,那么另一个进程B运行时如果想要用libc.so,那么就不会再加载一份啊,而是共享进程A的那份libc.so啊,我是不是哪里理解错了
2014-2-12 10:10
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
windows下加载dll库的时候是怎么弄的呀,是copy on write的吗
2014-2-12 10:15
0
雪    币: 1392
活跃值: (5207)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
7
如果不修改的话,所有进程都是用的同一个文件,准确点来说是共享代码段。一旦你修改就复制一个副本专供你使用
2014-2-12 12:37
0
雪    币: 47
活跃值: (43)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
恩恩,明白了!那可不可以关闭这个COW写时复制的机制啊?
2014-2-12 13:41
0
游客
登录 | 注册 方可回帖
返回
//