编译 FASM/MASM 为 JS

Compile FASM/MASM to JS

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

或者 asm -> llvm-ir -> js?

更新: 所以我的最后一个问题是: 我有 asm 清单(摘录)

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

我可以在浏览器中 运行 不借助 emscriptten 或任何其他工具进行修改吗?

I want to run executable(small program) in browser without access to original source code

所以,你其实并不想把程序集编译成js,因为你没有源码。这很好,因为它无论如何都没有任何意义,asm 不像高级语言有一些变量并通过一些 API 影响平台,在 asm 中基本上任何指令都可以改变平台的状态很多,并且"variables" 是整个可访问内存。

一种有意义的方式:

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

"In browser"(直接)这是不可能的,浏览器不处理 CPU 的机器代码,也不提供 OS API/ABI/syscall。该可执行文件需要目标 OS,因此它的指令具有预期的效果。

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

如何创建目标平台的模拟器这个问题有点太宽泛了,需要付出更多的努力,在某些情况下需要花费数十年的时间。但你可能很幸运,你的目标模拟器 OS 已经存在,并且有 JS 端口和许可证允许你使用它。

还有第二种选择:如果它真的是小程序,用 JS 和 OS/browser 不可知的方式从头重写它可能会更简单。


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

简单说一下"no"。 (虽然可能大约 50% 的机器代码翻译起来相当容易,但另一半则需要翻译者完全理解代码的作用,这完全是 NP 问题(或根本不可能))。