有什么方法可以仅使用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库
keystone
和pwntool
。但是,它们仅支持与汇编命令相对应的机器代码字节发射。
(它没有生成由小标题,节标题等组成的
ELF binary
。)另外,它不支持处理外部库信息。 (例如
line 5
)问:我想使用python库生成完整的ELF BINARY
a.out
。有什么可行的方法吗?
最佳答案
我想组装以下文件
请注意,您的程序定义不正确:
您调用printf
,但是您不允许初始化C运行时。 (如果要调用任何libc函数,则应让_start
在crt0.o
中定义,并且程序应从main
而不是_start
开始)。
您没有正确终止程序(不要调用exit
,_exit
或执行SYS_exit
syscall)。您可以从main
返回(libc提供的_start
然后将为您执行SYS_exit
),但是您一定不能从_start
返回,并且一定不要从其结尾跌落到任何代码或数据立即之后。
回到您最初的问题:可以“手工组装” ELF文件-数据就是数据。
但是,这需要做很多工作(而且是毫无意义的工作),因此,只需调用外部汇编器和链接器,您就会变得更好。