【问题标题】:how to put files and exported functions in one dll?如何将文件和导出的函数放在一个 dll 中?
【发布时间】:2022-01-24 20:42:46
【问题描述】:

出于某种原因,我需要将文件放入 DLL 中。我知道我可以把它放在一个纯资源 DLL 中,但我不想让其他人知道如何读取该文件。 所以我希望能够将此文件连同有关如何读取文件的函数一起放入 DLL 中。 有谁知道这是怎么做到的吗 ?谢谢

【问题讨论】:

  • 您要导出什么样的信息?可以简单地表示为std::strings 还是std::istringstreams?
  • 如果您不想让任何人知道如何读取文件,但如何读取文件的说明就在文件旁边,如何防止他们读取文件?听起来您可能依赖于“通过默默无闻的安全”,这应该避免。
  • 其实这个文件是深度学习的模型文件。我将在 DLL 中提供有关如何读取此模型的函数。 @πάνταῥεῖ
  • 我不希望客户单独获取模型文件以进行重量更新等操作,但我允许他们使用模型进行推断。 @πάνταῥεῖ
  • 一旦你发布了一个DLL,你就放弃了所有对其内容保护的控制权。将该数据导出为符号、自定义或标准资源,或者根本不导出数据都没有关系。攻击者可以轻松读取您要保护的信息。

标签: c++ windows dll resources


【解决方案1】:

这是一种适用于文本文件和二进制文件的想法。

将文件存储为base64编码

$ cat file.txt
Hello World
Hello World
Hello World
Hello World
Hello World
Hello World

$ cat file.txt | base64 > base64.txt

$ cat base64.txt
SGVsbG8gV29ybGQKSGVsbG8gV29ybGQKSGVsbG8gV29ybGQKSGVsbG8gV29ybGQKSGVsbG8gV29y
bGQKSGVsbG8gV29ybGQKCg==

然后在你的 c++ 文件中

static std::string fileout = R"(
SGVsbG8gV29ybGQKSGVsbG8gV29ybGQKSGVsbG8gV29ybGQKSGVsbG8gV29ybGQKSGVsbG8gV29y
bGQKSGVsbG8gV29ybGQKCg==
)";

std::string readme() {
    return base64::decode( fileout );
}

您可以在这里找到几个 base64::decode() 版本: Base64 decode snippet in C++

【讨论】:

  • 我使用这种技术将黄金数据存储到我的 C++ 单元测试中。效果很好。
猜你喜欢
  • 2022-12-17
  • 1970-01-01
  • 2012-11-28
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 2021-02-06
相关资源
最近更新 更多