有什么方法可以只使用 python 库生成 ELF BINARY 吗?

Is there any way to generate ELF BINARY using only python library?

有什么方法可以仅使用 python 库生成 ELF binary 吗?

我想使用 python 库 assemble 下面的文件。

a.s :

line 1 : .global _start
line 2 : _start:
line 3 :  push _STRING1
line 4 :  push _STRING2
line 5 :  call printf
line 6 : _STRING1:
line 7 :  .string "gogo"
line 8 : _STRING2:
line 9 :  .string "%s"

我尝试使用两个 python 库 keystonepwntool.
但是,它们仅支持与汇编命令对应的机器代码字节发射。
(它没有生成 ELF binary 由 elf header, section header,.. 等组成)

此外,它不支持处理外部库信息。 (比如line 5


问。我想使用 python 库生成一个完整的 ELF BINARY a.out
有什么办法可以做到吗?

I want to assemble the below file

请注意,您的程序是不适定义的:

  • 您调用了 printf,但您不允许初始化 C 运行时。 (如果你想调用任何libc函数,你应该让_start定义在crt0.o,你的程序应该从main开始,而不是_start)。

  • 您没有正确终止程序(不要调用 exit_exit 或执行 SYS_exit 系统调用)。您可以从 main return(libc 提供的 _start 将为您执行 SYS_exit),但您必须 而不是 return 来自 _start,并且肯定不会从它的末尾掉落到紧随其后的任何代码或数据。

回到您最初的问题:"hand-assemble" ELF 文件是可能的——数据就是数据。

但是,这是一项 很多 的工作(而且是毫无意义的工作),所以您最好直接调用外部汇编器和链接器。

我知道一个名为 radare2 的强大工具 https://github.com/radare/radare2。 它还支持 python 绑定 https://github.com/radare/radare2-bindings.

Radare 可以用作汇编程序https://radare.gitbooks.io/radare2book/content/tools/rasm2/assemble.html。我没有测试过,但我认为它可以帮助您处理 elf 二进制文件。 但总的来说,您尝试做的事情可能需要大量的体力劳动。