对于逆向工程师来说,将图形调试器附加到 OpenGL 应用程序以提取着色器源代码非常简单。据我了解,另一方面,Vulkan 使用 SPIR-V 字节码,而不是将明文着色器传递给图形 API。
SPIR-V 字节码是否会混淆着色器源代码,或者是否相当容易反编译?
最佳答案
有一个entire specification详细解释每个 SPIR-V 操作码的行为。这有点与混淆相反。但事情远不止这些。
SPIR-V 尽管是“汇编”,但保留了有关源程序的大量信息。它包含结构定义、带有参数和返回类型的函数定义、循环和条件构造等。为 SPIR-V 编写反编译器一点也不困难。
SPIR-V 还可以选择包含注释各种 SPIR-V 定义的文本片段。这更多的是编译为 SPIR-V 的环境的函数,但输出 SPIR-V 可以包含变量名称、结构名称等。如果您愿意,这些 OpName 装饰都可以轻松剔除。
但即使没有名字,所有重要的结构信息都在那里。因此,与原始 GLSL 相比,SPIR-V 的安全 yield 相当小。
关于opengl - SPIR-V 字节码是否提供混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279546/