c++ - 是否可以使用不在 header 中的 C++ 库代码?

标签 c++

<分区>

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

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

最佳答案

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

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

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

如果您想阻止坏人获得对您图书馆内部结构的任何访问权限,您必须做几件事:

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

关于c++ - 是否可以使用不在 header 中的 C++ 库代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53886343/

相关文章:

c++ - String.find 总是返回 true (C++)

c++ - 任务管理器显示的线程比我创建的多

c++ - 对于 Eigen SparseMatrix,innerIndexPtr() 和 outerIndexPtr() 到底代表什么?

c++ - 在 Windows 10 上使用 D3D11 调试层和 VS2013

c++ - 在编译时检查该类是否有 C++ 中的基类

c++ - 生成错误 : base specifier must name a class

c++ - 我是否需要针对不同的指令集制作多个可执行文件?

c++ - C++ 中的泛型 JAVA? <X extends T> 怎么办?

c++ - 为什么只能在头文件中实现模板?

c++ - 我的 SFINAE 检查 std::map/std::vector 有什么问题?