2016-10-04 44 views
0

是否有可能將彙編或x86/x64代碼編譯爲JavaScript?將FASM/MASM編譯爲JS

或asm - > LLVM-IR - > JS?

UPD: 所以我的最後一個問題是: 我有ASM上市(節選)

push %rbp 
mov %rsp,%rbp 
sub $0x10,%rsp 
mov 0x5e41(%rip),%eax 
lea 0x601a(%rip),%rdx 
cltq 
movzbl (%rdx,%rax,1),%eax 
test %al,%al 
jne loc_0040121b 
movl $0x0,-0x4(%rbp) 
jmp loc_00401206 

我可以在瀏覽器中運行,而不與emscriptten幫助或其他任何工具修改?

+1

應該是什麼結果? – Ped7g

+0

事實是asm沒有編譯,它是組裝的。如果你想用JS來模擬一臺機器,也許使用傳統彙編器的二進制輸出會更容易。 –

+0

@ Ped7g我想運行在瀏覽器可執行文件(小程序),而不訪問原始的源代碼 – OwnageIsMagic

回答

0

我要在不訪問原始的源代碼運行在瀏覽器可執行文件(小程序)

所以,你其實不想編譯組件JS,因爲你沒有資源。這是好的,因爲它沒有任何意義,asm不像高級語言那樣具有一些變量,並且通過某些API影響平臺,在asm中,基本上任何指令都可以改變平臺的狀態,「變量」是整個可訪問的內存。

它是如何有意義的一種方式:

要執行已經有一段目標平臺(CPU + OS)準備了一些機器代碼。

「以瀏覽器」(直接地)這是不可能的,瀏覽器確實該CPU不處理的機器代碼,它也不提供OS API/ABI /系統調用。該可執行文件需要目標操作系統,因此它的指令具有預期的效果。

您可以運行OS寫在JS的仿真器,並運行仿真器內部的二進制文件。搜索網絡在線dosbox的例子(在瀏覽器中運行舊的DOS遊戲,速度合理,準確度不是最高的,其中大部分實際上都是可玩的,看起來應該是這樣)。

如何創建目標平臺的模擬器是有點太寬泛的問題,並採取某種程度上更多的努力,像幾十年來在某些情況下。但你可能很幸運,已經存在你的目標操作系統的模擬器,並有JS端口和許可證,允許你使用它。

還有第二個選擇:如果它是真正的小程序,這將是非常容易簡單的JS和OS /瀏覽器無關的方式從頭開始重寫。


編輯:關於機器代碼 - > LLVM IR:

讓我們簡單地說 「不」。 (雖然大概50%的機器代碼可以很容易翻譯,但另一半需要譯員充分理解代碼的作用,這完全是NP問題(或根本不可能))。

+0

我認爲,運行的操作系統是矯枉過正這種情況下,但 我莫名其妙忘記了調用'libc'是平臺相關的操作:) – OwnageIsMagic

+0

@OwnageIsMagic:好..是的。現在考慮機器代碼甚至不必費心打電話給libc,並且可以直接訪問HW/OS。 – Ped7g

+0

我可以授予該程序不執行任何interupts/syscals(顯式) – OwnageIsMagic