BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #9530同步于 2010/10/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

关于elf文件的一个问题

hman
2010/10/13镜像同步7 回复
以前书上一直看到一个process运行时候分成什么text,data,bss各个section。 今天我用objdump了一下,发现并没有这么多section。text是有的,data和bss都没有。 不知道是为何?
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
hman机器人#1 · 2010/10/13
我定义了全局的一个整型数组,可以也没有找到这个数组在什么地方。
hman机器人#2 · 2010/10/13
额,我用readelf看到data,bss了。 难道objdump是dump不出来的?
hobby机器人#3 · 2010/10/13
之前用过两下objdump就随便说两句 应该有啊,你用objdump -h能看到各个段,如果objdump -D的话也能找到data的踪迹(大概是disassmble of data之类的说明) 不过,可能看到的东西和预想的不太一样。比如你定义了一个256个元素的全局数据,.out文件应该不会找到那么长一段东西,执行的时候再分配就行了嘛。这中间就设计到elf执行、重定位等问题了。 另外,多说一句,你的这个问题完全可以自己动手。 其实不难找到答案,上网查查,自己看看命令的参数说明,再试试很容易找到答案的。 反而,这样的问题放到论坛里不一定能得到你期望的答复
hman机器人#4 · 2010/10/14
好吧,是我没有说清楚。 事后我确实用readelf看到了section。 一开始我是用objdump -S a.out看的。我想这个dump出来的应该是整个elf文件的所有东西了,包括了平时讲的.data, .text, .bss等section。 但是我没有看到。 而且我定义了一个全局变量,从汇编代码上来看,那个地址也没有在dump出来的地址空间中。 我是想用objdump -S看一下整个elf文件的安排格式。网上说前面是header,中间是segment header,sections,最后是section header。 但是我用objdump -S看到了其他的一些section,如.init , .end 。 如果用readelf或者objdump -h只能看到这个部门的东东,而不是整个elf格式的样子。 我用二进制的方式也看过a.out,文件的最后确实有.bss的字符串。我就以为objdump可以将整个elf文件全dump出来,看看每个section是在什么地方,elf的格式怎么编排的。而不是就是列出有几个section啊啥的。
hman机器人#5 · 2010/10/14
不过还是要感谢hobby的批评,我又看了一遍manual 发现用 objdump -DS 就可以dump出来所有section了,不过还是dump不出来section header, segment header。 那我感觉这个看elf的格式是不是只能用readelf来看了?
hobby机器人#6 · 2010/10/15
呵呵 不敢说批评 其实我只是谈谈自己的理解,说说我觉得怎样是更有效的学习和交流方式。 其实大家都是这么过来的,一上来啥都不懂,慢慢的摸到门道之后就能更有效的学习。 另一方面,与其他同学学习和交流也很重要,这也正是我们协会和版面发展的主要目标,这还需要更多像你一样的热心同学多多支持!! 【 在 hman 的大作中提到: 】 : 不过还是要感谢hobby的批评,我又看了一遍manual : 发现用 objdump -DS 就可以dump出来所有section了,不过还是dump不出来section header, segment header。 : 那我感觉这个看elf的格式是不是只能用readelf来看了?
hman机器人#7 · 2010/10/15
恩,大力支持hobby 其实,我有的时候是有点偷懒了。。。