我正在尝试编写一个简单的代码来使用 WPM 将程序中的字符串替换为另一个字符串,我能够使其工作,但只能部分工作。这是我用来获取结果的代码的一部分。
string strWrite;
cin >> strWrite;
strWrite = strWrite + "\0";
if (WriteProcessMemory(hProcess, (LPVOID) reqdAddr, &strWrite[0], strWrite.size(), NULL) == false)
{
cout << "WriteProcessMemory failed. GetLastError = " << dec << GetLastError() << endl;
system("pause");
return EXIT_FAILURE;
}
当我尝试用 blabla
替换原始字符串 DefaultString
时,我得到的结果是 blablatString
。我尝试过将 strWrite.size()
替换为 strWrite.size() + 1
并意识到结果更改为 blabla String
。我需要帮助替换整个字符串,而不仅仅是其中的一部分。
最佳答案
如果(似乎是这种情况)目标字符串存储为 std::string 那么这种方法将不起作用。它们有一个程序员不应该知道的内部结构(除非你在头文件中四处挖掘)并且你在那里的代码没有考虑到这一点。即使您这样做了,下一个版本的编译器也可能会破坏您的代码。
因此请考虑(如果可以的话)将目标字符串存储为简单的 C 字符串。只要您不跑到最后并添加一个终止 nul,覆盖它就很简单了。我会明确地这样做——不要假设源字符串是以 nul 结尾的,它可能不是。或者使用 std::string.c_str()
并从中复制 size() + 1
个字节。
关于c++ - 如何使用 WriteProcessMemory (WPM) 替换字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50591774/