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