2013-07-29 63 views
2

我最近一直在使用汇编级编程,并且能够使用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转换为可执行文件,我该怎么做?如何使用十六进制创建二进制可执行文件?

+0

你在写什么操作系统? Windows或Linux或其他平台? – bloopletech

+1

我使用的Ubuntu的,但我想保持与Windows和Linux与Linux具有更高优先级的讨论 – vikkyhacks

回答

2

为:

.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 
+0

谢谢,这是非常有前途的,但有没有办法做到这一点nasm的方式。我看到你正在使用煤气装配工! – vikkyhacks

+0

我相信它是非常相似的,只需定义数据,但nasm想要什么全球链接器变量global _start或类似的东西... –

1

你给的十六进制数据不是机器代码,它是ASCII文本,更具体了一系列以空值终止字符串:

ze 
_start 
__bss_start 
_edata 
_end 

如果你有一个包含原始机器代码的文件,例如一个生产使用'nasm -f bin',可以使用nasm的incbin指令将其嵌入到程序集文件中。

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

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

和组装和链接照常。

相关问题