免费注册 查看新帖 |

Chinaunix

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

程序中/ld-linux.so.2地址修改 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-24 23:24 |只看该作者 |倒序浏览
我有一个程序是动态连接的, 系统使用/ld-linux.so.2作为连接器,在程序运行前,系统已经把 /ld-linux.so.2 放置在程序的 (0x00812000)地址处, 有什么办法可以控制其放置的位置吗,我在程序的连接脚本中,没找到类似的设置点。

但用ldd 命令查看这个文件时,发现这个 :  /lib/ld-linux.so.2 (0x00812000) , 就是说这个地址已经决定了。 有什么办法可以修改这个地址吗?


现在通过prelink 可以设定  ld-linux.so.2 的放置在内存中的地址 ,

修改gcc 中 -specs 的配置文件, 使其指向 新的  ld-linux.so.2 , 但运行出现问题, 出现段错误, 发现是访问了0x00819***的内存空间,应是原来的ld-linux.so.2数据段空间, 如何修改?

论坛徽章:
0
2 [报告]
发表于 2009-12-25 16:58 |只看该作者
gcc 中 -specs 只能时更换ld,但是不能指定内存位置吧。

这个还得研究连接脚本

论坛徽章:
0
3 [报告]
发表于 2009-12-25 22:56 |只看该作者

回复 #2 emmoblin 的帖子

在连接脚本lds里,只能设置本程序各个段的地址, 而没知道设置共享库的地址, 在编译生成的elf文件中, dynamic section中,只有各个共享库的字符串如 : “ld-linux.so", ”libc。so“等, 而无地址设定。

prelink可以重新设置一个库或程序的地址,但我对ld-linux.so.2重新设定有,运行出现问题了。应该是访问了为修改前的地址got的地址,现在还没知道问题的原因。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP