是否有可能自動將x86彙編代碼片段(不是完整的程序)轉換爲相應的二進制機器代碼片段?如何將彙編代碼片段轉換爲二進制機器代碼片段?
例如:
xor eax, eax
mov [ebx + 12], eax
到:
31 c0
89 43 0c
我真的只需要相應的字節集。通常我不得不查看一些指令設置參考並手動翻譯它,但我確定有一些程序會自動執行。
如果你知道這樣的工具,請告訴我它的名字或共享一個鏈接。
是否有可能自動將x86彙編代碼片段(不是完整的程序)轉換爲相應的二進制機器代碼片段?如何將彙編代碼片段轉換爲二進制機器代碼片段?
例如:
xor eax, eax
mov [ebx + 12], eax
到:
31 c0
89 43 0c
我真的只需要相應的字節集。通常我不得不查看一些指令設置參考並手動翻譯它,但我確定有一些程序會自動執行。
如果你知道這樣的工具,請告訴我它的名字或共享一個鏈接。
我對我的問題做了一個解決方法。它適用於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字節的塊之間。
我的情況與此類似。不過,我的解決方案只適用於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
您可以使用fasm了點。它可以將自我包含的彙編代碼片段編譯爲二進制文件。非常有用。
這沒什麼意義,彙編程序需要操作碼助記符,就像您的第一個片段。併產生字節。沒有名爲「Visual Studio彙編程序」的產品。 –
對不起,我的意思是,結果代碼應該與VS可執行文件兼容(例如可以注入),但是當然從彙編器到機器代碼只有一個翻譯。 – eclipse
是'dumppe.exe'你在找什麼?使用我在[這個問題]上的回答中概述的方法(http:// stackoverflow。COM /問題/ 18466658 /弄回最彙編級代碼,從-EXE-文件/ 18471761)? _(我真的不想寫出所有這些,因爲我可能不符合標準)_ – James