ELF文件中的导入表在哪里?

9
我在字符串表中找到了“.dynsym”,获得了索引。然后我发现带有sh_name = index && sh_type = SHT_DYNSYM的部分。因此,我得到了sh_offset = 464和sh_size = 64。但是您可以看到附图,偏移量464上只有零。
我推测导入表从偏移量528开始。问题是:如何计算它 %)
1个回答

8
但您可以在附图中看到,偏移量为464的位置上只有零。
错误:我最近检查过,“01”,“20”,“29”,“12”等不是“仅有零”。
我认为导入表从偏移量528开始。
不,它并没有。由于某种原因,您期望在ELF文件中找到Microsoft PE风格的导入表。但实际上并不存在。
在ELF中,相当于导入表的内容包含在两个表中。其中一个包含Elf{32,64} _Sym固定大小的记录:
typedef struct
{
  Elf32_Word    st_name;                /* Symbol name (string tbl index) */
  Elf32_Addr    st_value;               /* Symbol value */
  Elf32_Word    st_size;                /* Symbol size */
  unsigned char st_info;                /* Symbol type and binding */
  unsigned char st_other;               /* Symbol visibility */
  Elf32_Section st_shndx;               /* Section index */
} Elf32_Sym;

另一个表格包含在.dynstr节中(在您的文件中从偏移量528开始),只包含由NUL字符分隔的(可变大小的)字符串。

第一个表格中的.st_name指的是.dynstr中的偏移量。

第一个表格包含在.dynsym节中。


谢谢你的回答。但在偏移量464处没有Elf32_Sym记录。我从.dynsym节的头部得到了sh_offset = 464。奇怪的是,sh_size = 64,与此同时sizeof(Elf32_Sym) = 16。 - Qwerty
我刚有了一个想法。也许那64个字节是4条记录(Elf32_Sym)? - Qwerty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接