在C++中,WriteProcessMemory不会更改VisualStudio之外的值

In C++, WriteProcessMemory will not change value outside of VisualStudio

本文关键字:VisualStudio C++ WriteProcessMemory      更新时间:2023-10-16

它在Visual studio内部运行时会更改值,但如果我构建程序并运行可执行文件,它实际上不会更改值。这是代码:

using namespace std;
DWORD pid;
DWORD players = 0x00883D70;
int playerCount = 0;
int readValue = 0;
int firstTime = 0;
int main()
{
HWND hWnd = FindWindowA(0, ("Diablo II"));
GetWindowThreadProcessId(hWnd, &pid);
HANDLE pHandle = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid);
if (firstTime == 0)
{
cout << "This is a tool to set the player count in Diablo II: Lord of Destruction v1.14D" << endl;
cout << "This tool was made by xElite_V." << endl;
cout << "You can set a number between 0 and 255 for player difficulty:" << endl;
}
else {
cout << "You can set a number between 0 and 255 for player difficulty:" << endl;
}
firstTime = 1;
cin >> playerCount;
WriteProcessMemory(pHandle, (LPVOID)players, &playerCount, sizeof(playerCount), 0);
main();
}

所以我不明白为什么它在视觉工作室里不会做同样的事情。

您几乎肯定有权限问题,但由于您的代码没有正确检查错误,没有人能确切地告诉您。

实际上,你需要做很多事情才能让它发挥作用,这里有一些代码可以做到这一点:

https://stackoverflow.com/a/51346951/5743288

请注意,这是在调用ReadProcessMemory,但其思想是相同的。