c++ - 将读取的内存过程存储在缓冲区中,然后对其进行搜索

标签 c++ winapi memory

我想从一个进程中读取 16 MB (FFFFFF) 的内存并将其存储在一个数组中,这样当我在数组中搜索时,如:array[i],我将是真正的内存地址。

假设我想从 000000 搜索到 FFFFFF,我想跳转 sizeof(value),从该地址获取地址并将其存储在 var 中。

然后 if(var==value) 返回地址。

我有这个: ReadProcessMemory(phandle,(void*)address,buffer,0xFFFFFF,0);

编辑:

我有这个(BlueWanderer 回答):

class offset_buffer{
private:
        char *buf;
        int offset;

public:
        offset_buffer(char *in_buf, int in_offset)
                : buf(in_buf), offset(in_offset){
        }

        char & operator[](int in_index){
                return buf[in_index - offset];
        }

        void setOffset(int off){
                offset=off;
        }

        void ReadMemory(){
                LPBYTE point;
                DWORD primeiroAddress = 0x000000;
                DWORD finalAddress = 0xFFFFFF;
                //LPBYTE buffer = new BYTE[finalAddress-primeiroAddress];
                HANDLE phandle = OpenProcess(PROCESS_VM_READ,0,TargetPID);
                ReadProcessMemory(phandle,(void*)primeiroAddress, buf, sizeof(buf), 0);
                CloseHandle(phandle);
        }
};

main(){
char *buffer = new char[0xFFFFFFF-0x0000000];
int address = 0x0000000;
offset_buffer b(buffer,address);
std::ostringstream ss;
int i=0;
TListItem *ListIt;
b.ReadMemory();
for(address=0x0000000;address<0xFFFFFFF;address+=sizeof(int)){
        if(b[address]==StrToInt(Edit1->Text.c_str())){
                 ss << std::hex << address;
                 showValue();
                 ss.str(std::string());
        }
}

怎么了??有人能帮我吗?为什么它不起作用

最佳答案

你想要这样的东西吗?

class offset_buffer
{
private: 
    char *buf;
    int offset;

public:
    offset_buffer(char *in_buf, int in_offset)
        : buf(in_buf), offset(in_offset)
    {
    }

    char & operator[](int in_index)
    {
        return buf[in_index - offset];
    }
};

它将您的真实地址映射到数组中的索引

offset_buffer b(buffer, address);

if (b[0x0C2F8E3] == 123) return 0x0C2F8E3;

关于c++ - 将读取的内存过程存储在缓冲区中,然后对其进行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10592681/

相关文章:

c++ - 在 C++/C 中声明变量时

c# - 使 GetRawInputDeviceInfo 和 RIDI_DEVICEINFO 与 C# 一起工作

c++ - 什么时候删除[]指针c++?

Python读取Linux进程内存并转储到文件

c - Win32 (C) 应用程序在一些 GetWindowText 后卡住?

android - 并不总是创建大位图

c++ - 类标志的模板专门化

c++ - 理解 std::function 的晦涩模板参数

c++ - 如何在声明时将对象插入到 std::map 中

c++ - 为什么在 IUserNotificationCallback COM 对象上查询 IMarshall 接口(interface)?