如果我不想让某人知道或更改硬编码值,宏是否比静态常量更安全?

Is macro more secure than static const if I don't want someone to know or change the hardcode value?

本文关键字:是否 静态 安全 常量 编码值 某人 我不想 如果      更新时间:2023-10-16

我搜索了一些关于

的话题
#define PASSWORD "abcde"

static const char* PASSWORD="abcde";

似乎#define没有将值存储在内存中(我不确定它是否正确)。我听说它可能有一些工具可以检测和访问在应用执行期间使用的内存地址(例如:更改游戏的某些值)。我担心,如果我使用static const char* PASSWORD,有人可能会通过检测PASSWORD的地址知道PASSWORD的值,并通过获取地址中的内容得到PASSWORD的值。

如果我想要硬码值更安全,使用#define更好吗?

在这种情况下不重要。由于两者都使用字符串字面量,因此字符串本身将存储在字符串池中,而不是动态地存在于堆上的某个地方。此外,宏在技术上甚至不存在,因为编译器简单地用#define定义替换了宏的所有实例。在运行时,程序不会看到差异。

编辑:正如有人提到的,如果您想搞乱安全性,请考虑散列。这将使用内存搜索程序提取密码变得更加困难。

你可能想用你的变量作为常量表达式。

constexp char* = "abc";

它比define要好,并且变量只在编译时存在,因此变量根本没有任何地址。然而,就像定义一样,它将直接将"abc"打印到二进制文件中。