【发布时间】:2022-01-07 11:57:37
【问题描述】:
我想更改 elf 文件执行的开始位置。例如,我在一个 elf 文件中有一个基本的 hello world 程序。实际代码位于文件中 0x1000 字节的偏移处。我想将该代码移动到 0x900 偏移量并修改文件,使其在 0x900 开始执行。我知道这听起来有点没用,但它确实有目的。
【问题讨论】:
标签: elf
我想更改 elf 文件执行的开始位置。例如,我在一个 elf 文件中有一个基本的 hello world 程序。实际代码位于文件中 0x1000 字节的偏移处。我想将该代码移动到 0x900 偏移量并修改文件,使其在 0x900 开始执行。我知道这听起来有点没用,但它确实有目的。
【问题讨论】:
标签: elf
首先你将你的程序编译/组装(clang/as/...)成一个hello.o ELF 目标文件。此时,您通常会让编译器驱动程序完成工作并发出 ELF 可执行文件。
您可以改为使用链接器 (lld/ld/...) 并使用 --entry 0x900 指定入口点。您也可以使用链接描述文件执行此操作。请注意,如果您这样做,您必须处理编译器驱动程序通常为您处理的一堆东西。 Oracle 链接器手册中的警告说:
当您直接调用链接编辑器时,您必须提供每个 创建预期输出所需的目标文件和库。这 链接编辑器不对目标模块或库做任何假设 您打算在创建输出时使用。
【讨论】: