Вопрос по c++, winapi, c – ReadProcessMemory быстрее

1

Я делаю приложение, которое будет имитировать действие, используя мышь / клавиатуру (макрос), зависящее от значения переменной.

Здесь у меня есть де-код сканирования, который я сделал:

void ReadMemory(int value){
        DWORD primeiroAddress = 0x000000;
        DWORD finalAddress = 0xFFFFFF;
        DWORD address=0;
        std::ostringstream ss;
        int i=0;
        TListItem *ListIt;
        int valor;
        HANDLE phandle = OpenProcess(PROCESS_VM_READ,0,TargetPID);
        if(!phandle){
                ShowMessage("Não encoutrou o processo");
        }else{
                for(address=primeiroAddress;address<=finalAddress;address+=sizeof(valor)){
                        ReadProcessMemory(phandle,(void*)address,&valor,sizeof(valor),0);
                        if(valor==value){
                                i++;
                                ss << std::hex << address;
                                Form1->Label5->Caption=i;
                                ListIt = Form1->ListView1->Items->Add();
                                ListIt->Caption = AnsiString(ss.str().c_str()).UpperCase();
                                ListIt->SubItems->Add(IntToStr(valor));
                                ss.str(std::string());
                        }
                }
        }
}

Мне было интересно, что я мог сделать, чтобы сканирование было быстрее

Во-первых, чтение большими кусками, а во-вторых, только чтение адресов, которые содержат реальные данные. Увидетьexample code из предыдущего ответа. Jerry Coffin
Заметка, есть утечка ресурсов, так как дескриптор никогда не закрывается, вам нужноCloseHandle(phandle); еслиOpenProcess() удалось. hmjd
Вы должны проверять возвращаемое значение изReadProcessMemory(), Я представляю, что для многих адресов в диапазоне0 - 0xffffff Вы получите сообщение об ошибке (в частности, адреса в диапазоне0 - 0xfff должен всегда терпеть неудачу, я думаю). Michael Burr

Ваш Ответ

1   ответ
5

int вовремя. Вместо вызоваReadProcessMemory один раз, читая 16 МБ одним махом, затем сканируйте память в своем собственном процессе. Это будет намного быстрее.

Error: User Rate Limit Exceeded Guilherme Garcia
Error: User Rate Limit Exceeded Guilherme Garcia
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededchar *buffer = new char[0x1000000] ?
Error: User Rate Limit Exceeded Guilherme Garcia

Похожие вопросы