gpt4 book ai didi

c++ - 如何使用 WriteProcessMemory (WPM) 替换字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:05:46 26 4
gpt4 key购买 nike

我正在尝试编写一个简单的代码来使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com