是否有任何工具、教程或资源可以帮助理解 NaCL 二进制文件?它们有一些应该让事情变得更容易的特性——最重要的是,完全可判定的反汇编和代码/数据消歧。但是在反汇编器中查看它们,很难理解发生了什么,因为大多数有趣的事情都是通过调用 NaCL 运行时完成的,而且我似乎找不到关于那里有哪些函数可用或如何使用的好的文档解决反汇编中的调用。
有很多类似的代码(示例来自hotword-x86-64.nexe):
21d70: 81 c4 b8 00 00 00 add esp,0xb8
21d76: 4c 01 fc add rsp,r15
21d79: 41 5b pop r11
21d7b: 0f 1f 44 00 00 nop DWORD PTR [rax+rax*1+0x0]
21d80: 41 83 e3 e0 and r11d,0xffffffe0
21d84: 4d 01 fb add r11,r15
21d87: 41 ff e3 jmp r11
这使得遵循控制流变得非常困难。
这些二进制文件很有趣,因为它们在某些方面是 Google 对 ActiveX 的回答,并且它们已被用于发布诸如OK Google(又名热门词)之类的有争议的功能。
我发现的一个资源是 SFI 机制的技术描述:
这给出了一些关于(例如)什么有用的提示R15,主要是关于 NaCL 汇编代码必须遵守的限制,而不是事情是如何工作的。