我正在尝试在编译时对字符串进行加密,但是该字符串似乎仍然存在于可执行文件的数据中。
我禁用了所有优化,但是仍然存在
class str {
public:
template<unsigned int Size>
constexpr str(wchar_t(&String)[Size], wchar_t KeyCharacter)
: m_Buffer{}, m_Key{}, m_Size{} {
this->m_Size = Size;
this->m_Key = KeyCharacter;
this->SetString(String);
}
~str() {
}
template<unsigned int Size>
constexpr void SetString(wchar_t(&String)[Size]) {
for(unsigned int i{}; i < this->m_Size; ++i) {
this->m_Buffer[i] = String[i] ^ this->m_Key;
String[i] = L'\0';
}
this->m_Buffer[this->m_Size] = L'\0';
}
constexpr wchar_t* GetString() {
return this->m_Buffer;
}
wchar_t m_Buffer[250];
wchar_t m_Key;
unsigned int m_Size;
};
int main() {
wchar_t unstr[] = { L"Hello, world!" };
str s(unstr, L'a');
getchar();
return 0;
}
顺便说一句,该代码不会评估为memcpy调用,这只是伪代码的解释
如您所见,hello world文本仍然存在,但是在SetString函数中将其清空。它在运行时为空,但仍显示在二进制文件中。
这是怎么回事?为什么琴弦还在那里?我该如何解决?