首页
社区
课程
招聘
[求助]linker中查看exec格式的elf文件符号出现段错误
发表于: 2013-8-29 15:09 5273

[求助]linker中查看exec格式的elf文件符号出现段错误

2013-8-29 15:09
5273
这两天准备看一下android的linker执行过程, 写了个测试程序trace一下, 但发现在linker加载完elf文件后,查找加载后的符号,不能读符号的内容,一读就有段错误。

同样的方法, 查看DYN的so文件不会出现段错误, 但查看EXEC的可执行文件会出现段错误

这里还有些比较奇怪的是, 自己写的测试程序的maps信息,可执行程序是从0x00008000开始加载的, 但我在android环境下编写的服务程序,是从

测试程序maps信息:
00008000-00015000 r-xp 00000000 5d:20 281        /data/test
00015000-00016000 rwxp 0000c000 5d:20 281        /data/test
00016000-00019000 rwxp 00000000 00:00 0
...

(在这个环境中,从linker中查看全局变量的值就出现段错误, 用gdbserver查看,同样的地址,没有段错误)

android程序maps信息:
root@android:/ # cat /proc/1682/maps                                          
400a2000-400a8000 r-xp 00000000 5d:10 99         /system/bin/PolicyCollection
400a8000-400a9000 rw-p 00000000 00:00 0
400a9000-400aa000 r--p 00006000 5d:10 99         /system/bin/PolicyCollection
400aa000-400ab000 rw-p 00000000 00:00 0
400ab000-400bc000 r-xp 00000000 5d:10 173        /system/bin/linker
....

Android下边的可执行程序,其类型依旧是 DYN(shared object file)
两种情况下,为何加载地址是不一样的?

这里看起来是:静态链接的,在linker中查看值就挂,动态链接的,在linker中可以查看值。两种格式的ELF文件都能在linker中查找和定位到符号。
为何会出现这种情况?

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

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//