在Linux下用十六进制文件创建可执行文件
我有一个文件,它的内容表示十六进制的x64机器代码在Linux下用十六进制文件创建可执行文件,linux,compiler-construction,executable,machine-code,hexdump,Linux,Compiler Construction,Executable,Machine Code,Hexdump,我有一个文件,它的内容表示十六进制的x64机器代码 48 c7 c0 7b 00 00 00 48 c7 c1 59 01 00 00 48 01 c8 c3 上述示例可分解为: 0: 48 c7 c0 7b 00 00 00 mov rax,0x7b 7: 48 c7 c1 59 01 00 00 mov rcx,0x159 e: 48 01 c8 add rax,rcx 11: c3
48 c7 c0 7b 00 00 00 48 c7 c1 59 01 00 00 48 01 c8 c3
上述示例可分解为:
0: 48 c7 c0 7b 00 00 00 mov rax,0x7b
7: 48 c7 c1 59 01 00 00 mov rcx,0x159
e: 48 01 c8 add rax,rcx
11: c3 ret
这个机器代码是直接生成的,所以上面显示的汇编程序是为了示例。一般来说,我无法访问它
我想做的是以最直接的方式将这个十六进制文件转换为可执行文件。我尝试使用xxd-r
,但这似乎无法创建格式良好的可执行文件,因为我在尝试运行它时遇到了Exec格式错误
如何在Linux下从十六进制代码生成可执行文件?根据我对问题后面讨论的理解,我想做的是创建一个ELF文件。这个
尽管如此,如果您不想遇到麻烦,实际上可以使用gcc
将字节序列编译成可执行文件
.section .text
.global main
main:
.byte 0x48 0xc7 0xc0 0x7b 0x00 0x00 0x00 0x48 0xc7 0xc1 0x59 0x01 ...
然后,您可以使用gcc file.S-o文件
编译上述内容。这将创建所需的ELF文件。基本上您想要一个ELF二进制文件?最直接的方法是组装您已有的反汇编代码。@PiRocks似乎是这样的!尽管我有一个“编译器”,专门负责汇编程序的工作,但出于这个原因,我不想依赖外部汇编程序。我想我的问题是:既然我已经生成了机器代码,那么将其转换成elf文件的最后一步是什么?生成的机器代码不需要链接,它保证不使用外部库。因此,您正在寻找一种编程方式来创建elf文件,而不是基于工具的方法?如果是这样,两种方法是生成一个对象文件并使用链接器获取最终的elf文件,或者自己生成elf文件。有帮助吗?