elf - 如何动态加载可重定位的 ELF 可执行文件?

标签 elf

我正在尝试为 ARM 平台编写 elf 可执行加载程序。我在这里有一些查询

1) 如何生成可重定位或位置无关的 ELF 可执行文件(编译器和链接器选项是什么) 2) 如何加载上面生成的 ELF 可执行文件。

首先,我做了一些工作,并且工作正常。我正在为 RO_Base 使用固定地址,并且在构建时不拆分段(不使用任何 --split 选项),因此我获得了连续的代码、数据、bss 部分。在此之后,我将 Sprite 加载到与 RO_Base 相同的地址并将代码作为新线程执行。这工作正常。我没有做过任何搬迁等...

现在我想通过生成可重定位的 ELF 并将 Loader 修改为适当的更改,使其动态并能够加载到任何地址。
请帮助我使其工作。

谢谢,

最佳答案

只需使用 -r 标志链接器即可使文件可重定位。

使用类似 this 的东西重定位内存中的文件。

关于elf - 如何动态加载可重定位的 ELF 可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2325203/

相关文章:

linker - 最终的可执行文件是否使用符号表来检查变量范围

c - 如何从 ELF 和 PE 文件中找到所有 "user defined functions"?

c - 如何在 ELF 文件中制作重复的部分

elf - 如何最好地确定二进制文件是否包含 STAB 或 DWARF 调试信息?

c++ - 使用 clang++、-fvisibility=hidden、typeinfo 和 type-erasure

assembly - 为什么编译这个简单的汇编代码并链接到 ELF 会导致比平面二进制文件更大的大小?

c++ - 如何让 GCC 将 .text 部分编译为 ELF 二进制文件中的可写部分?

c++ - 虚拟析构函数将对象移出 rodata 部分

gcc - 为什么针对已安装的glibc编译的程序不能正常运行?