符号,ELF以及如何在内存中链接

时间:2015-04-09 19:59:08

标签: linux assembly 64-bit elf

据我所知,ELF格式命名链接器链接的所有外部符号。我想要做的是加载一个未链接的ELF并将其链接到内存中并动态链接。

有人可以向我解释一些必要的细节,如何关闭链接以及内存中的内容会发生什么变化?

[更新]

为了澄清和捍卫这个问题,我们还要提供更多信息。

  1. 我理解跳转地址并且可以使用C从内存函数中获取跳转地址。所以加载C程序我得到所有这些地址。
  2. 参数传递是已知的,并且硬接线没有任何关于它。
  3. 在ASM或C o文件(ELF格式)中,我找到了一个与问题相关的符号表,但我不知道在哪些操作码中我必须调整它以及如何调整。
  4. 请不要告诉我阅读gnu libc的内容。这不是面临的问题。我既不想深入研究这样的格式,也不想弄乱他们的OP代码解析东西。

    那么符号表如何在内存中处理并表达?对于知道如何完成的人来说,它应该是一个简单的答案。

1 个答案:

答案 0 :(得分:1)

ELF在磁盘上分为几个部分,但在内存中分段。

基本上,加载过程意味着执行段到段映射,然后处理修正。 (包括像GOT这样的全球表格)

通过符号加载是一种不同的加载方式。它可能执行第一个过程,然后在特殊表中搜索符号。

无论如何,获得快速洞察力的最佳免费资源是阅读"连接器和装载机" J. Irvine的免费电子书。