Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以使用c++;不在标头中的库代码? 我想知道(因为代码安全的原因),C++库的用户可以使用库的类、函数调用、变量,因为他只有一个带有库的头?_C++ - Fatal编程技术网

是否可以使用c++;不在标头中的库代码? 我想知道(因为代码安全的原因),C++库的用户可以使用库的类、函数调用、变量,因为他只有一个带有库的头?

是否可以使用c++;不在标头中的库代码? 我想知道(因为代码安全的原因),C++库的用户可以使用库的类、函数调用、变量,因为他只有一个带有库的头?,c++,C++,如果他通过在库文件中查找文本来猜测类和调用的名称,他是否可以编写一个头文件来使用代码?是的,至少对于访问具有外部链接的全局变量是可能的。想象一下: foo.cpp int foo = 42; main.cpp #include <iostream> extern int foo; int main() { std::cout << foo; } #包括 外间国际办事处; int main(){ std::cout首先,头文件实际上只是为了方便。没有什么可以

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

是的,至少对于访问具有外部链接的全局变量是可能的。想象一下:

foo.cpp

int foo = 42;
main.cpp

#include <iostream>
extern int foo;

int main() {

    std::cout << foo;
}
#包括
外间国际办事处;
int main(){

std::cout首先,头文件实际上只是为了方便。没有什么可以阻止用户使用库的文档(甚至只是通过反向工程库)重新创建头文件,因此也没有什么可以阻止他们添加标题中遗漏的库公共接口部分

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

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

如果您想阻止坏角色访问库的内部,您必须做以下几件事:

  • 决定你要抵制的演员有多坏
  • 决定你想要抵抗的攻击形式
  • 决定你想要抵抗的攻击强度
  • 决定在尝试中要牺牲多少可用性
  • 意识到这完全是徒劳的,停止尝试

  • 当然,为什么不呢?简短的回答是肯定的。如果你需要,你就不应该设计图书馆。你应该使用C++以外的东西。你说的“代码安全”是什么意思??谢谢你的回答,还有一个问题-有可能保护图书馆不受此类行为的影响吗?可能会混淆吗?@Mirojansik这不值得。你花在“不可压缩”上的时间和精力最好是花在“不可压缩”上,因为你不能使它“不可压缩”如果它有外部链接是的。我想知道OP是否更多地考虑了非导出的内部(因为所有其他内容都应该在标题中)@LightnessRacesinOrbit我已经修改了我的免责声明。我不确定他们是否想要非导出的符号。酷,我们拭目以待