我有一个文件,内容以十六进制表示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文件。