我正在编写一个库,我需要使用一些常量整数。我已经将常量int声明为我的c函数中的局部变量,例如const int test = 45325;
现在我想要隐藏这个常量变量。这意味着,如果我与某人共享这个库作为.so,他应该无法找到这个常数值吗? 是否可以隐藏库中定义的常量整数?请帮忙
这是我的示例代码
int doSomething() {
const int abc = 23456;
int def = abc + 123;
}
doSomething被定义为我的cpp文件中的本地函数。我在同一个函数中对某些计算引用了这个常量。
答案 0 :(得分:2)
如果我理解正确,你就不会那么担心一个导出的符号(因为它是一个普通的正常局部变量,我不用担心这一点),但是任何人都发现这个常数(可能是因为它是许可证检查的加密密钥或魔术常量,或类似的东西。
这原则上是不可能的。拥有二进制代码的人(在库中必然是这种情况)如果他愿意,可以弄明白。你可以通过以一种模糊的方式计算这个值来使它变得更难(但要注意编译器优化),但即便如此,这只会让想要找到它的人变得非常困难。这只是意味着有人不会立即在拆卸中看到“mov eax,45325”,但它可能不会让某人忙碌超过几分钟。
答案 1 :(得分:1)
常量将始终以某种形式包含在库中,即使它是将其加载到寄存器中的指令,原因很简单,库需要它在运行时才能使用它。
如果这意味着某种秘密密钥,那么在图书馆内保护它是没有好办法的(实际上,你做得越努力,就会越多人认为这是一项运动找到它)。 / p>
答案 2 :(得分:0)
最简单的可能是为他们做一个包装类
struct Constants
{
static int test();
...
然后你可以隐藏.cpp文件中的常量
答案 3 :(得分:0)
您可以将其声明为
extern const int test;
然后将它实际定义在某个编译单元(.cpp文件)中。
您还可以使用函数来获取值。