簡體   English   中英

如果我不希望有人知道或更改硬編碼值,宏是否比靜態const更安全?

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

我搜索了一些有關

#define PASSWORD "abcde"

static const char* PASSWORD="abcde";

似乎#define不會將值存儲在內存中(我不確定是否正確)。 我聽說它可能有一些工具可以檢測和訪問應用執行期間正在使用的內存地址(例如:更改游戲的某些值)。 恐怕,如果我使用static const char* PASSWORD ,可能有人會通過檢測PASSWORD的地址來了解PASSWORD的值,並通過獲取地址中的內容來獲取PASSWORD的值。

如果我想更安全地使用硬編碼值,最好使用#define嗎?

在這種情況下沒關系。 由於兩者都使用字符串字面量,因此字符串本身將存儲在字符串池中,而不是動態地存在於堆中。 同樣,從技術上講 ,宏甚至都不存在,因為編譯器只是用#define定義替換了宏的所有實例。 在運行期間,該程序不會有任何區別。

編輯:正如有人提到的那樣,如果您想弄亂安全性,請研究一下hashing 這將使用內存搜索程序提取密碼變得更加困難。

您可能希望將變量用作常量表達式。

constexp char* = "abc";

它比定義好,並且變量僅在編譯時存在,因此該變量根本沒有任何地址。 但是,就像定義一樣,它將直接將“ abc”打印到二進制文件中。 您可能希望將其與哈希混合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM