gpt4 book ai didi

c++ - 没有外部内核文件的openCL

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:39 24 4
gpt4 key购买 nike

我想创建一个 OpenCL 内核,但不向最终用户提供访问权限。

因此,我不能使用常规的外部 .cl 文本文件。关于我想避免使用内核创建巨大文本字符串的替代方案是什么?

还有一个问题,如果我将这段代码放在一个硬编码的字符串中,是否无法从某些反汇编程序访问该代码?

最佳答案

这里有两种情况:

  1. 如果您的目标是一台设备
  2. 如果您的目标是任何 OpenCL 设备

在第一种情况下,可以将二进制数据嵌入到您的可执行文件中(使用字符串)。并在运行程序时加载它。不可能进行逆向工程(除非已知的逆向工程,如汇编),因为该程序将具有编译代码而不是您编写的原始代码。

这样做的方式是:

uchar binary_dev1[binarySize] = "..."
uchar * binary = &binary_dev1;
program = clCreateProgramWithBinary(context, 1, &device,
&binarySize,
(const unsigned char**)&binary,
&binaryStatus,
&errNum);

第二种选择涉及通过某种“修改”来保护内核中的源代码。由于要编译 mangler 代码,因此对其进行逆向工程可能会很复杂。

你可以做任何你能想到的可逆的重整,甚至可以将它们结合起来。一些想法:

  • 使用压缩格式压缩代码,但对解压的一些参数进行硬编码,以使其不那么直接。

    • LZ4、ZLIB 等...
  • 对代码使用 XOR 运算符。如果它随时间变化更好,如果它使用非显而易见的规则变化则更好。

    • 例如:
      char seq = 0x1A;
      for(int i=0; i<len; i++){
      out[i] = in[i] ^ seq;
      seq = ((seq ^ i) * 78965213) >> 4 + ((seq * i) * 56987) << 4;
      }
  • 使用需要 key 且可逆的编码方法对其进行编码

  • 使用可保护您的程序二进制文件免受逆向工程影响的程序,例如 Themida。

关于c++ - 没有外部内核文件的openCL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32232136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com