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

标签 c++ string readprocessmemory

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

相关文章:

C++ ReadProcessMemory 收到 998/3E6 错误

C# 读取进程内存 : How to read a 64 bit memory address?

c++ - 在 ctor 的初始化列表中使用算术是否稳定?

python - 拆分字符串并将 Discord 表情符号替换为 [name]

c++ - &arr[size] 有效吗?

C - 附加到字符串 - 可能的内存错误

r - 在 R 中拆分包含多个分隔符的字符串

c++ - 获取进程的基址

c++ - 如何在屏幕上打印内容

c++ - 从 makefile (g++) 创建两个单独的可执行文件