反向工程师直接将图形调试器附加到OpenGL应用程序以提取着色器源代码。我的理解是,另一方面,Vulkan使用SPIR字节码,而不是将纯文本着色器传递给图形API。
SPIR字节码是混淆了着色源,还是很容易分解?
发布于 2016-09-01 20:37:58
有一个全规格详细解释了每一个SPIR操作码的行为.这和混淆完全相反。但更重要的是。
尽管是“汇编”,SPIR保留了大量关于源程序的信息。它包含了结构定义、带有参数和返回类型的函数定义、循环结构和条件结构等。为SPIR-V编写反编译程序并不困难。
SPIR还可以选择性地包含注释各种SPIR定义的文本片段.这更像是编译成SPIR的环境的一个函数,但是输出SPIR可以包含变量名称、结构名称等等。如果您愿意,这些OpName装饰都可以很容易地被剔除。
但即使没有名字,所有重要的结构信息也是存在的。因此,与原始GLSL相比,SPIR的安全性增益非常小。
发布于 2016-09-01 20:04:42
它不会造成任何真正的混淆。它唯一能做的就是去掉变量名。
如果应用程序不愿意使实际计算复杂化,那么就是这样。
由于vulkan需要结构化的控制流,所以它不能对控制流做太多的工作。其中,每个条件分支必须有一个合并块,并且每个循环都有一个严格的结构。
发布于 2016-09-02 15:13:51
SPIR操作码的行为类似于Java中的字节码:
操作码与普通代码的可逆性是不容易解决的。Java字段中使用的一些解决方案是:
https://stackoverflow.com/questions/39279546
复制相似问题