首页 > 解决方案 > 是否可以使用不在标头中的 c++ 库代码?

问题描述

我想知道(出于代码安全原因) - c++ 库的用户可以使用库的类、函数调用、他不知道的变量,因为他只有一个与库有关的标头吗?

如果他通过在库文件中查找文本来猜测类和调用的名称,他是否可以编写一个允许他使用代码的头文件?

标签: c++

解决方案


首先,头文件实际上只是为了方便。没有什么能阻止用户使用库的文档重新创建头文件(或者甚至只是通过对库进行逆向工程),因此也没有什么能阻止他们添加在标头中遗漏的库的公共接口部分。

但是标头应该包含整个公共接口,否则有什么意义呢?此外,库通常应该被设计成其他任何东西具有内部链接并且不会被导出。尽管并非不可能,但使用它们更加困难,因为运行时(或静态)链接器不会将您手工制作的声明解析为引用库私有部分中的符号。在正常使用中,它们被认为是隐藏的。

这当然不是一种“安全”措施,因为最终任何东西都可以被黑掉,但是图书馆的内部结构通常被认为是安全地隐藏起来,以便于访问。

如果您想防止不良行为者获得对库内部的任何访问权限,则必须做几件事:

  1. 决定你想抵抗多糟糕的演员
  2. 决定你要抵抗哪种形式的攻击
  3. 决定你想抵抗多强的攻击
  4. 决定你想在尝试中牺牲多少可用性
  5. 意识到这完全是徒劳的,停止尝试

推荐阅读