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

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

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。)

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

  

问:我想使用python库生成完整的ELF BINARY a.out
有什么可行的方法吗?

最佳答案

我想组装以下文件


请注意,您的程序定义不正确:


您调用printf,但是您不允许初始化C运行时。 (如果要调用任何libc函数,则应让_startcrt0.o中定义,并且程序应从main而不是_start开始)。
您没有正确终止程序(不要调用exit_exit或执行SYS_exit syscall)。您可以从main返回(libc提供的_start然后将为您执行SYS_exit),但是您一定不能从_start返回,并且一定不要从其结尾跌落到任何代码或数据立即之后。


回到您最初的问题:可以“手工组装” ELF文件-数据就是数据。

但是,这需要做很多工作(而且是毫无意义的工作),因此,只需调用外部汇编器和链接器,您就会变得更好。

10-07 19:30
查看更多