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

3
最近我一直在进行汇编级别的编程,我能够使用nasm或as将汇编级别的代码转换为机器级别的代码,并从中提取十六进制代码。但是如何实现相反的过程呢?我需要仅给定十六进制码来编写二进制可执行文件。我需要将以下十六进制代码: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 转换为一个可执行文件,该如何操作?

你要为哪个操作系统编写代码?是Windows、Linux还是其他平台? - Brenton Fletcher
1
我使用Ubuntu,但我希望讨论涵盖Windows和Linux,其中Linux具有更高的优先级。 - vikkyhacks
1个回答

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

谢谢,这很有前途,但有没有以nasm方式实现的方法?我看到你在使用gas汇编器!!! - vikkyhacks
我相信它非常相似,只需按照nasm的要求定义数据以及任何全局链接器变量global _start或类似的内容即可... - old_timer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接