2013-07-29 116 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" 

和組裝和鏈接照常。

相關問題