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

Create executable out of hexadecimal file under Linux

我有一个文件,其内容代表十六进制的 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 format error

如何从 Linux 下的十六进制代码生成可执行文件?

根据我对我的问题之后的讨论的理解,我想做的是创建一个 ELF 文件。这个question covers how to create your own ELF header.

不过,如果您不想经历这些麻烦,您实际上可以使用 gcc 将字节序列编译为可执行文件。

.section .text
    .global main
main:
    .byte 0x48 0xc7 0xc0 0x7b 0x00 0x00 0x00 0x48 0xc7 0xc1 0x59 0x01 ...

然后你可以用gcc file.S -o file编译上面的代码。这将创建所需的 ELF 文件。