1

这里真的很快速的问题。我在 Ubuntu 中工作,我有一个简单的“Hello World!” 我已经组装成 x86 程序集的程序集。现在我想将该机器代码转换为我的计算机可以运行的 ELF 可执行文件。我知道我可以直接汇编到 ELF,我的调查目的是发现如何用汇编的机器代码制作 ELF 二进制文件。

谢谢!

4

2 回答 2

1

最终的 ELF 可执行文件通常由其他 ELF 文件构建而成,并由链接器重新组织。当然,最简单的方法是将 ELF 指定为汇编器的输出格式。


1)如果你真的想这样做,你可以从一个“空”的 ELF 文件开始(你从编译或组装什么都没有得到,等等)。然后您可以使用objcopy --add-section,它允许您将任意文件添加为现有 ELF 文件中的一个部分。

这将创建一个最小的 ELF 文件:

$ echo "" | gcc -c -o empty.out -xc -


2) 或者,您可以使用类似 nasm's 的东西将原始二进制文件包含到另一个程序集文件中incbin,然后需要将其组装为 ELF。


3)第三种选择(迄今为止最好的)是将原始二进制文件提供给链接器,并使用自定义链接器脚本告诉它将其放入哪个部分(由输入文件名确定)。-b输入文件之前的标志将告诉它ld是什么类型的文件。这应该让您使用您的平面二进制文件。


您将面临的首要障碍之一是让入口点指向您的代码。我不知道如何编辑它。

有一个 Python 库,pyelftools可以帮助您完成任务。

于 2013-04-03T06:42:33.467 回答
0

如果它真的是汇编的,那么它已经是 ELF 格式(针对 Linux 的编译器通常也将目标代码存储在 ELF 目标文件中)。

但是,如果您想要一个功能齐全的可执行文件,则必须将目标文件提供给链接器

于 2013-04-03T06:40:29.107 回答