将FASM / MASM编译为JS

时间:2016-10-04 10:26:50

标签: javascript assembly llvm-ir emscripten

是否可以将汇编或x86 / x64代码编译为JavaScript?

或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 个答案:

答案 0 :(得分:0)

  

我想在浏览器中运行可执行文件(小程序)而无需访问原始源代码

因此,您实际上不希望将程序集编译为js,因为您没有源代码。哪个好,因为它没有任何意义,asm不像高级语言有一些变量和影响平台通过一些API,在asm基本上任何指令都可以改变很多平台的状态,而“变量”是整个可访问的记忆。

一种有意义的方式:

您想要执行一些已为某些目标平台(CPU + OS)准备的机器代码。

“在浏览器中”(直接)它是不可能的,浏览器不处理该CPU的机器代码,也不提供OS API / ABI /系统调用。该可执行文件需要目标操作系统,因此它的指令具有所需的效果。

您可以运行用JS编写的操作系统的模拟器,并在模拟器中运行二进制文件。搜索web-online dosbox的例子(在浏览器中运行旧的DOS游戏,具有合理的速度和非最差的准确性,其中大多数实际上是可玩的并且看起来应该如此)。

如何创建目标平台的模拟器是一个有点过于宽泛的问题,并且需要更多努力,例如在某些情况下需要几十年。但是你可能很幸运,已经存在你的目标操作系统的模拟器,并且有JS端口和许可证允许你使用它。

还有第二种选择:如果它是一个非常小的程序,那么在JS中以及OS /浏览器无关的方式从头开始重写它将非常简单。

编辑:关于机器代码 - > llvm ir:

让我们说“不”。 (虽然可能有50%的机器代码翻译起来相当容易,但是另一半需要翻译人员完全理解代码的作用,这完全是NP问题(或根本不可能)。