c++ - 是否可以使用不在标头中的 c++ 库代码?
问题描述
我想知道(出于代码安全原因) - c++ 库的用户可以使用库的类、函数调用、他不知道的变量,因为他只有一个与库有关的标头吗?
如果他通过在库文件中查找文本来猜测类和调用的名称,他是否可以编写一个允许他使用代码的头文件?
解决方案
首先,头文件实际上只是为了方便。没有什么能阻止用户使用库的文档重新创建头文件(或者甚至只是通过对库进行逆向工程),因此也没有什么能阻止他们添加在标头中遗漏的库的公共接口部分。
但是标头应该包含整个公共接口,否则有什么意义呢?此外,库通常应该被设计成其他任何东西都具有内部链接并且不会被导出。尽管并非不可能,但使用它们更加困难,因为运行时(或静态)链接器不会将您手工制作的声明解析为引用库私有部分中的符号。在正常使用中,它们被认为是隐藏的。
这当然不是一种“安全”措施,因为最终任何东西都可以被黑掉,但是图书馆的内部结构通常被认为是安全地隐藏起来,以便于访问。
如果您想防止不良行为者获得对库内部的任何访问权限,则必须做几件事:
- 决定你想抵抗多糟糕的演员
- 决定你要抵抗哪种形式的攻击
- 决定你想抵抗多强的攻击
- 决定你想在尝试中牺牲多少可用性
- 意识到这完全是徒劳的,停止尝试
推荐阅读
- javascript - 从节点 js 请求外部 url
- google-cloud-platform - BigQuery DML(插入/删除/更新)分区时间复杂度
- r - 在 glm 模型中,如何在给定剩余自变量和因变量的值的情况下获得自变量结果?
- excel - VBA将集合中的自定义对象添加到临时变量
- excel - 如何在excel中创建一个比较单元格中的文本并返回百分比的公式
- python - 输入()的Python3疏远行为
- android - 在垂直列表中显示内部存储中的数据
- azure - Azure 应用程序网关将“/*”转发到后端池
- c# - 从 Windows 中的其他应用程序 gui 中提取数据
- python - 方阵遍历将具有相同值的相邻单元格分组