在Linux下用十六进制文件创建可执行文件

在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

我有一个文件,它的内容表示十六进制的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                      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文件。有帮助吗?