免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6469 | 回复: 6
打印 上一主题 下一主题

[系统] 关于linux的LD_PRELOAD [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-03 00:03 |只看该作者 |倒序浏览
最近试图使用LD_PRELOAD的方法劫持系统调用。按照http://chenm.blogbus.com/logs/52077181.html,成功的替换了read这个系统调用。但是问题出现了,如果我的程序中直接使用read,它会被替换为我自己实现的read,但是,如果我调用动态库libc的fread函数(fread最后也是调用的read),我发现我自己实现的read并没有被使用。

我很奇怪为什么会这样。于是我自己写了一个函数myRead,myRead调用系统调用read进行文件读写,然后我把这个函数编译进了一个动态库。奇怪的是如果我调用动态库的myRead,我发现最终调用的是我重写的read。

因为这个我郁闷了几天。不知大家能不能帮忙分析一下原因?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2013-04-03 09:33 |只看该作者
因为libc早在你LD_PRELOAD之前已经被load了

论坛徽章:
0
3 [报告]
发表于 2013-04-04 00:52 |只看该作者
恳请大哥讲的更详细些。按理说,程序启动起来之后,动态链接器会先装载LD_PRELOAD指定的库啊。不知大哥有没有办法让fread也使用我写的read呢?回复 2# hellioncu


   

论坛徽章:
0
4 [报告]
发表于 2013-04-04 03:06 |只看该作者
libc实现fopen/fread并非一定使用read,mmap+memcpy也是一种实现方式,可以参考libc的实现

论坛徽章:
0
5 [报告]
发表于 2013-04-04 10:29 |只看该作者
兄弟你好,我也重写了mmap,但是mmap也一样没有被fread使用。回复 4# bzcat

论坛徽章:
0
6 [报告]
发表于 2013-04-04 20:24 |只看该作者
回复 5# liu_19870919

你可以查看libc中相关函数的底层调用步骤,大部分以MACRO+INLINE_SYSCALL实现,如open即是如此,因此这部分不能被替换
   

论坛徽章:
0
7 [报告]
发表于 2013-04-05 00:36 |只看该作者
回复 6# bzcat

兄弟,谢谢你的解答。通过你的解答,我找到了这个,受益匪浅呀!http://blog.csdn.net/dajian790626/article/details/8227569
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP