本地常量如何存储在c ++库文件中

时间:2011-02-22 10:37:53

标签: c++

我正在编写一个库,我需要使用一些常量整数。我已经将常量int声明为我的c函数中的局部变量,例如const int test = 45325;

现在我想要隐藏这个常量变量。这意味着,如果我与某人共享这个库作为.so,他应该无法找到这个常数值吗? 是否可以隐藏库中定义的常量整数?请帮忙

这是我的示例代码

int doSomething() {

const int abc = 23456;
int def = abc + 123;

}

doSomething被定义为我的cpp文件中的本地函数。我在同一个函数中对某些计算引用了这个常量。

4 个答案:

答案 0 :(得分:2)

如果我理解正确,你就不会那么担心一个导出的符号(因为它是一个普通的正常局部变量,我不用担心这一点),但是任何人都发现这个常数(可能是因为它是许可证检查的加密密钥或魔术常量,或类似的东西。

这原则上是不可能的。拥有二进制代码的人(在库中必然是这种情况)如果他愿意,可以弄明白。你可以通过以一种模糊的方式计算这个值来使它变得更难(但要注意编译器优化),但即便如此,这只会让想要找到它的人变得非常困难。这只是意味着有人不会立即在拆卸中看到“mov eax,45325”,但它可能不会让某人忙碌超过几分钟。

答案 1 :(得分:1)

常量将始终以某种形式包含在库中,即使它是将其加载到寄存器中的指令,原因很简单,库需要它在运行时才能使用它。

如果这意味着某种秘密密钥,那么在图书馆内保护它是没有好办法的(实际上,你做得越努力,就会越多人认为这是一项运动找到它)。 / p>

答案 2 :(得分:0)

最简单的可能是为他们做一个包装类

struct Constants
{
   static int test();
...

然后你可以隐藏.cpp文件中的常量

答案 3 :(得分:0)

您可以将其声明为

extern const int test;

然后将它实际定义在某个编译单元(.cpp文件)中。

您还可以使用函数来获取值。