我搜索了一些关于
的主题#define PASSWORD "abcde"
和
static const char* PASSWORD="abcde";
似乎#define
没有将值存储在内存中(我不确定它是否正确)。我听说它可能有一些工具可以检测和访问应用程序执行期间正在使用的内存地址(例如:更改游戏的某些值)。我担心,如果我使用static const char* PASSWORD
,有人可能会通过检测PASSWORD的地址知道PASSWORD的值,并通过获取地址中的内容来获取PASSWORD的值。
如果我希望硬编码值更安全,使用#define
是否更好?
最佳答案
在这种情况下并不重要。由于两者都使用字符串文字,因此字符串本身将存储在字符串池中,而不是动态存在于堆上的某个位置。此外,宏技术上甚至不存在,因为编译器只是用#define
定义替换了宏的所有实例。在运行时,程序不会看到任何差异。
编辑: 正如有人提到的,如果您想扰乱安全性,请查看 hashing 。这将使使用内存搜索程序提取密码变得更加困难。
关于c++ - 如果我不想让别人知道或更改硬编码值,宏是否比静态常量更安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30721902/