gpt4 book ai didi

linux - 符号、ELF 以及如何在内存中链接

转载 作者:太空宇宙 更新时间:2023-11-04 05:44:11 24 4
gpt4 key购买 nike

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

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

[更新]

为了澄清并捍卫这个问题,避免再次过于宽泛,这里有一些更多信息。

  1. 我了解跳转地址,并且可以使用 C 从内存函数中获取跳转地址。因此,加载 C 程序时我会得到所有这些地址。
  2. 参数传递是已知的并且是硬连接的,没有任何相关内容。
  3. 在 ASM 或 C o 文件(ELF 格式)中,我找到了一个应该与问题相关的符号表,但我不知道必须在操作码中的何处进行调整以及如何调整。

请不要告诉我阅读 gnu libc 的内容。这不是要面对的问题。我既不想深入研究 so 格式,也不想摆弄他们的 OP 代码解析内容。

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

最佳答案

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

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

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

无论如何,获得快速洞察的最佳免费资源是阅读 J. Irvine 编写的“链接器和加载器”免费电子书。

关于linux - 符号、ELF 以及如何在内存中链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29547826/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com