我有一个elf二进制文件,dynsym
输出后面有readelf
个符号表:
Num: Value Size Type Bind Vis Ndx Name
0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND
1: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 (2)
2: 0000000000000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__
3: 0000000000400440 0 FUNC GLOBAL DEFAULT UND printf@GLIBC_2.2.5 (2)
4: 0000000000400460 0 FUNC GLOBAL DEFAULT UND fgets@GLIBC_2.2.5 (2)
value
列的含义是什么?由于此表的400440
为printf
,这是否意味着动态链接器必须在该地址映射printf
?如果是,这个值是如何决定的?它是随机的吗?
编辑:另外,这是带有gcc的linux x86-64
答案 0 :(得分:5)
似乎函数类型的未定义动态符号的值只是它们在PLT中的条目的地址。同样,变量的条目值可能只是它们在GOT中的条目。