我有一个 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
列的含义是什么?由于此表的 printf
为 400440
,这是否意味着动态链接器必须将 printf
映射到该地址?如果是,这个值是如何决定的?是随机的吗?
编辑:此外,这是带有 gcc 的 linux x86-64
最佳答案
看起来函数类型的未定义动态符号的值只是它们在PLT中的条目的地址。同样,变量条目的值可能只是它们在 GOT 中的条目。
关于c - elf符号表中value列的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46132875/