2014-01-24 24 views
0

是否有可能自動將x86彙編代碼片段(不是完整的程序)轉換爲相應的二進制機器代碼片段?如何將彙編代碼片段轉換爲二進制機器代碼片段?

例如:

xor eax, eax 
mov [ebx + 12], eax 

到:

31 c0 
89 43 0c 

我真的只需要相應的字節集。通常我不得不查看一些指令設置參考並手動翻譯它,但我確定有一些程序會自動執行。

如果你知道這樣的工具,請告訴我它的名字或共享一個鏈接。

+1

這沒什麼意義,彙編程序需要操作碼助記符,就像您的第一個片段。併產生字節。沒有名爲「Visual Studio彙編程序」的產品。 –

+0

對不起,我的意思是,結果代碼應該與VS可執行文件兼容(例如可以注入),但是當然從彙編器到機器代碼只有一個翻譯。 – eclipse

+0

是'dumppe.exe'你在找什麼?使用我在[這個問題]上的回答中概述的方法(http:// stackoverflow。COM /問題/ 18466658 /弄回最彙編級代碼,從-EXE-文件/ 18471761)? _(我真的不想寫出所有這些,因爲我可能不符合標準)_ – James

回答

1

我對我的問題做了一個解決方法。它適用於Windows平臺,並使用與Visual Studio一起使用的ML64彙編程序。 我創建了一個template.asm文件,這個模板:

ml64 /c template.asm 

明知nop指令被轉換爲0x90我可以寫一個程序,搜索字節:

.code 

main proc 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 

; ------------------------------------------- 
; enter assembly code here 
; ------------------------------------------- 

    mov [ebx + 12], eax 
    xor eax, eax 

; ------------------------------------------- 

    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
    nop 
main endp 

end 

然後我就用它編譯在兩個10 x 0x90字節的塊之間。

0

我知道有兩種主要的裝配:NASMMASM

有彙編的幾個符號變體,據我所知MASM與VS語法更加兼容。

這些從程序集生成機器碼。如果您想查看十六進制字節,請使用您的首選十六進制編輯器。

我目前只在Windows下使用NASM,所以我不能告訴你有關VS集成的任何信息,但通常彙編程序應該是您正在使用的工具。

+0

感謝您的幫助。你的回答並不完全符合我的要求,但它啓發了我使用匯編程序自己編譯代碼,並添加了一些代碼標記(如我的答案中所述的nop指令)以輕鬆找到代碼。謝謝! – eclipse

0

我的情況與此類似。不過,我的解決方案只適用於gcc工具鏈。

比方說,你有你的code.s組裝,那麼下面將工作:

$ gcc -c code.s && ld -o output.bin code.o --oformat=binary -Ttext=0 2>/dev/null && rm code.o 

在output.bin你有你的彙編的指令。如果你希望他們在十六進制格式,你可以做以下(僅適用於Linux或系統的XXD):

$ xxd -p output.bin 
0

您可以使用fasm了點。它可以將自我包含的彙編代碼片段編譯爲二進制文件。非常有用。