读取进程内存问题未更新
ReadProcessMemory trouble not updating
这个程序在开始时确实可以工作,但在几次循环后出错
我在使用ReadProcessMemory时遇到问题。它在我的程序开始时工作并以大字符串读取,但会停止正确更新值。例如,它将保留前一个字符串并在程序的其余部分使用该字符串,或者直到我关闭程序之前,字符串中将完全没有任何东西。这在前两次工作后随机发生。基本地址包含游戏中通过悬停效果的物品的文本字符串。但是,readprocessmemory似乎在几次后停止工作,我已经仔细检查了该地址是否仍在通过作弊引擎更新正确的值,并且确实如此,但它没有在程序中正确更新。我知道代码写得不好,我应该使用向量等......
问题出现在这里:
while(temp.size() < 150 ){
do{
// memset(&buffer[0], 0, sizeof(buffer));
ReadProcessMemory(hProcHandle, (LPCVOID)myaddr, &buffer, sizeof(buffer), NULL);
temp = std::string((char*)buffer);
}
while(temp == previous);
std:: cout << temp.size() << std::endl;
}
上面的代码以前不是一个循环,我尝试再次调用它,直到它有新值或不为空,但是一旦程序停止使用错误值,无论我调用多少次它,它都会卡在循环中,但是作弊引擎中的相同地址正在同时更新, 我已经仔细检查过了。此循环中的主要问题是 readprocessmemory 继续具有与先前调用相同的值,并保持这种状态,直到关闭程序。该地址在运行的同时在游戏中更新。
#include <iostream>
#include <Windows.h>
#include <string>
#include <ctime>
#include <sstream>
#include <algorithm>
#include <vector>
DWORD ariaBase = 0x400000 + 0x009B5A20;
std::string teatime[] = {" + 5 E"," + 6 Acc"," + 5 Acc"," + 6 Acc"," + 5 Acc"," + 7 Crit"," + 6 Damage"," + 5 Damage"," + 4 Damage"," + 3 Crit"};
unsigned char* buffer[800] = {0};
std::string temp = "";
std::string previous = "";
int myaddr = 0;
bool match[5];
DWORD aOffset[] = {0x724, 0x37C, 0x0, 0xAC, 0x50};
int count = 0;
std::vector<std::string> stats;
bool statsFound = false;
void WriteToMemory(HANDLE hProcHandle){
stats.clear();
temp = "";
while(temp.size() < 150 ){
do{
// memset(&buffer[0], 0, sizeof(buffer));
ReadProcessMemory(hProcHandle, (LPCVOID)myaddr, &buffer, sizeof(buffer), NULL);
temp = std::string((char*)buffer);
}
while(temp == previous);
std:: cout << temp.size() << std::endl;
}
previous = temp;
std::replace( temp.begin(), temp.end(),(char)'', '*');
stats = findStats(temp);
//for( std::vector<std::string>::const_iterator i = stats.begin(); i != stats.end(); ++i)std::cout << *i << ' ' << std::endl;
}
int main(){
...code...
...code...
...code...
...code...
while(statsFound == false){
round++;
checkItem();
Sleep(2000);
WriteToMemory(hProcHandle);
std::cout << round << std::endl;
for( std::vector<std::string>::const_iterator i = stats.begin(); i != stats.end(); ++i)std::cout << *i << ' ' << std::endl;
for(int i = 0; i < stats.size();i++){
for(int j = 0; j < 10;j++){
if(("Identified Attribute:" + teatime[j]) == stats[i])match[i] = true;
}
}
count = 0;
for(int i = 0; i < stats.size();i++){
if(match[i] != true)statsFound = false;
else count++;
if(count == stats.size())statsFound = true;
}
match[0] = false;
match[1] = false;
match[2] = false;
match[3] = false;
if(statsFound == false)MouseStart();
}
...code...
...code...
...code...
}
您能说出您从中读取数据的目标进程的内存中驻留了什么吗?你听说过GetLastError函数吗?在 ReadProcessMemory 返回后立即调用它,这可能会提供线索。
相关文章:
- 有关纯 ECS(实体组件系统)和更新系统的问题
- 在 for 循环中更新两个变量时遇到问题C++
- 在构造函数中更新指针向量时出现问题
- C++ 指针问题 - 通过方法更新指针
- 家庭作业问题 - C++更新已识别的变量
- C++:地下城爬行者 - 更新数组时出现问题
- G 9.1更新后的STD :: stable_sort的问题
- CListCtrl 更新滚动条问题
- 在设置 if-else 语句以删除特定货币并保持更新时遇到问题
- 由于线程问题,Qt-Gui没有更新
- 频繁更新 std::atomic<double> 数据有问题吗?
- 更新对象的属性时遇到问题?
- 使用指针对指针可以解决类成员不更新的问题吗?如果是,如何
- 更新链表时遇到问题
- 读取进程内存问题未更新
- sed/regex - 更新具有范围问题的源文件
- 我的弹丸更新功能有什么问题?
- 错误LNK2019,如何解决此问题*更新*
- 提升更新问题与我的代码
- 未找到 dyld 符号,但 nm 报告其他情况(OS X 更新问题)