首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPIR-V字节码是否提供混淆?

SPIR-V字节码是否提供混淆?
EN

Stack Overflow用户
提问于 2016-09-01 19:32:56
回答 3查看 1.6K关注 0票数 2

反向工程师直接将图形调试器附加到OpenGL应用程序以提取着色器源代码。我的理解是,另一方面,Vulkan使用SPIR字节码,而不是将纯文本着色器传递给图形API。

SPIR字节码是混淆了着色源,还是很容易分解?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-09-01 20:37:58

有一个全规格详细解释了每一个SPIR操作码的行为.这和混淆完全相反。但更重要的是。

尽管是“汇编”,SPIR保留了大量关于源程序的信息。它包含了结构定义、带有参数和返回类型的函数定义、循环结构和条件结构等。为SPIR-V编写反编译程序并不困难。

SPIR还可以选择性地包含注释各种SPIR定义的文本片段.这更像是编译成SPIR的环境的一个函数,但是输出SPIR可以包含变量名称、结构名称等等。如果您愿意,这些OpName装饰都可以很容易地被剔除。

但即使没有名字,所有重要的结构信息也是存在的。因此,与原始GLSL相比,SPIR的安全性增益非常小。

票数 5
EN

Stack Overflow用户

发布于 2016-09-01 20:04:42

它不会造成任何真正的混淆。它唯一能做的就是去掉变量名。

如果应用程序不愿意使实际计算复杂化,那么就是这样。

由于vulkan需要结构化的控制流,所以它不能对控制流做太多的工作。其中,每个条件分支必须有一个合并块,并且每个循环都有一个严格的结构。

票数 3
EN

Stack Overflow用户

发布于 2016-09-02 15:13:51

SPIR操作码的行为类似于Java中的字节码:

  • 它创建了一个中性元操作符,操作码,更接近机器原始代码,以方便Spir驱动程序转换为原始GPU代码。
  • 作为优势,操作码避免了普通源代码的分布,编译后的spir代码应该有编译问题,例如错误或语法错误--它已经编译了;
  • 一个缺点是二进制表示与普通源代码的可逆性。

操作码与普通代码的可逆性是不容易解决的。Java字段中使用的一些解决方案是:

  • 混淆--就像ProGuard为Java的字节码所做的--不确定这在SPIR中是否可行;
  • 使用对称密钥加密代码--密钥是在C代码中硬编码的。
  • 具有非对称密钥的密码加密-私钥来自web,在登录到服务器后。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39279546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档