是否可以将汇编或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或任何其他工具的帮助下在浏览器中运行它而无需修改?
答案 0 :(得分:0)
我想在浏览器中运行可执行文件(小程序)而无需访问原始源代码
因此,您实际上不希望将程序集编译为js,因为您没有源代码。哪个好,因为它没有任何意义,asm不像高级语言有一些变量和影响平台通过一些API,在asm基本上任何指令都可以改变很多平台的状态,而“变量”是整个可访问的记忆。
一种有意义的方式:
您想要执行一些已为某些目标平台(CPU + OS)准备的机器代码。
“在浏览器中”(直接)它是不可能的,浏览器不处理该CPU的机器代码,也不提供OS API / ABI /系统调用。该可执行文件需要目标操作系统,因此它的指令具有所需的效果。
您可以运行用JS编写的操作系统的模拟器,并在模拟器中运行二进制文件。搜索web-online dosbox的例子(在浏览器中运行旧的DOS游戏,具有合理的速度和非最差的准确性,其中大多数实际上是可玩的并且看起来应该如此)。
如何创建目标平台的模拟器是一个有点过于宽泛的问题,并且需要更多努力,例如在某些情况下需要几十年。但是你可能很幸运,已经存在你的目标操作系统的模拟器,并且有JS端口和许可证允许你使用它。
还有第二种选择:如果它是一个非常小的程序,那么在JS中以及OS /浏览器无关的方式从头开始重写它将非常简单。
编辑:关于机器代码 - > llvm ir:
让我们说“不”。 (虽然可能有50%的机器代码翻译起来相当容易,但是另一半需要翻译人员完全理解代码的作用,这完全是NP问题(或根本不可能)。