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

问题描述 投票:3回答:1

我有一个文件,内容以十六进制表示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下从十六进制代码生成可执行文件?

linux compiler-construction executable machine-code hexdump
1个回答
0
投票

根据对问题后的讨论的了解,我想创建一个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文件。

© www.soinside.com 2019 - 2024. All rights reserved.