免费注册 查看新帖 |

Chinaunix

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

[Linux] 为什么我的的elf文件包含多个size=0的symbol? [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-10-09 10:37 |只看该作者 |倒序浏览
我尝试理解elf当中的symtab,于是有下面这个小文件:
$ cat a.c
  1. int i=0;
  2. int j;
  3. static int l=4;
  4. void k();
  5. void d(){
  6.   k();
  7. }
复制代码
编译并查看这个文件的ELF:
  1. $ gcc -g a.c -c -m32 && readelf -s a.o

  2. Symbol table '.symtab' contains 18 entries:
  3.    Num:    Value  Size Type    Bind   Vis      Ndx Name
  4.      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
  5.      1: 00000000     0 FILE    LOCAL  DEFAULT  ABS a.c
  6.      2: 00000000     0 SECTION LOCAL  DEFAULT    1
  7.      3: 00000000     0 SECTION LOCAL  DEFAULT    3
  8.      4: 00000000     0 SECTION LOCAL  DEFAULT    4
  9.      5: 00000000     4 OBJECT  LOCAL  DEFAULT    3 l
  10.      6: 00000000     0 SECTION LOCAL  DEFAULT    5
  11.      7: 00000000     0 SECTION LOCAL  DEFAULT    7
  12.      8: 00000000     0 SECTION LOCAL  DEFAULT    8
  13.      9: 00000000     0 SECTION LOCAL  DEFAULT   10
  14.     10: 00000000     0 SECTION LOCAL  DEFAULT   12
  15.     11: 00000000     0 SECTION LOCAL  DEFAULT   14
  16.     12: 00000000     0 SECTION LOCAL  DEFAULT   15
  17.     13: 00000000     0 SECTION LOCAL  DEFAULT   13
  18.     14: 00000000     4 OBJECT  GLOBAL DEFAULT    4 i
  19.     15: 00000004     4 OBJECT  GLOBAL DEFAULT  COM j
  20.     16: 00000000    14 FUNC    GLOBAL DEFAULT    1 d
  21.     17: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND k
复制代码
上面的信息让我不解的地方是:
网上说Value的信息是对应节的偏移,size是目标大小。为什么所有的对应节的偏移都是0,而且多个size也都是0。

(1) 大小为0,偏移为0,就是不存在的啊,为什么还会有对应的Type, Ndx和Name?
(2) 而且,如果size=0,那么上面的第"1"行,源文件的名称main.c对应Ndx=ABS(不该被重定位的符号),到底应该存在ELF文件的什么地方? 我的理解是size=0,就不存了?
非常疑惑。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2016-10-09 11:02 |只看该作者
回复 1# asker160

网上说Value的信息是对应节的偏移,size是目标大小。


ELF 有自己的规范文档,elf(5) 里面也有对 ELF 格式信息的介绍。你应该参考这些权威内容,而不是网上找到的内容可疑的信息。

论坛徽章:
6
2015年辞旧岁徽章
日期:2015-03-05 16:13:092015年迎新春徽章
日期:2015-03-05 16:13:092015小元宵徽章
日期:2015-03-06 15:58:1815-16赛季CBA联赛之浙江
日期:2016-11-05 14:38:4115-16赛季CBA联赛之新疆
日期:2016-11-11 18:38:06
3 [报告]
发表于 2016-10-09 11:48 |只看该作者
这跟权不权威没啥关系。
简单说来,有的符号还未定义,不知道它的长度,如例中的k符号;有的符号则不需要关心它的长度,如例中的文件名符号“a.c”,是编译器自己插入的辅助用途的符号
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP