如何使用hex创建二进制可执行文件?

时间:2013-07-29 03:42:59

标签: assembly binary hex

我最近一直在使用汇编级编程,我能够使用nasm或者将汇编级代码转换为机器级代码,并从中提取十六进制代码,但是反转怎么可能呢?我需要写二进制可执行文件,只给出十六进制。我需要将以下十六进制7a\x65\x00\x5f\x73\x74\x61\x72\x74\x00\x5f\x5f\x62\x73\x73\x5f\x73\x74\x61\x72\x74\x00\x5f\x65\x64\x61\x74\x61\x00\x5f\x65\x6e\x64\x00转换为可执行文件,我该怎么做?

2 个答案:

答案 0 :(得分:2)

A.S:

.globl _start
_start:
.byte 0x7a,0x65,0x00,0x5f,0x73,0x74,0x61,0x72,0x74,0x00,0x5f,0x5f,0x62,0x73,0x73,0x5f,0x73,0x74,0x61,0x72,0x74,0x00,0x5f,0x65,0x64,0x61,0x74,0x61,0x00,0x5f,0x65,0x6e,0x64,0x00

gnu工具链命令

as a.s -o a.o
ld a.o -o a

修改

输入此修改所需的时间比谷歌搜索

要长

nasm语法:

global _start
_start:
db 0x7a,0x65,0x00,0x5f,0x73,0x74,0x61,0x72,0x74,0x00,0x5f,0x5f,0x62,0x73,0x73,0x5f,0x73,0x74,0x61,0x72,0x74,0x00,0x5f,0x65,0x64,0x61,0x74,0x61,0x00,0x5f,0x65,0x6e,0x64,0x00

答案 1 :(得分:1)

您提供的十六进制数据不是机器代码,而是ASCII文本,更具体地说是一系列以null结尾的字符串:

ze
_start
__bss_start
_edata
_end

如果您的文件包含原始机器代码,例如使用'nasm -f bin'生成的文件,则可以使用nasm的incbin指令将其嵌入到汇编文件中。

说代码在x.bin中。然后你生成一个这样的存根:

        section .text
        global _start
_start:
        incbin "x.bin"

并像往常一样组装和链接。