我最近一直在使用汇编级编程,我能够使用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
转换为可执行文件,我该怎么做?
答案 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"
并像往常一样组装和链接。