我想從一個進程中讀取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()); } }
有什麼不好?有人能幫我嗎?爲什麼它不起作用
這應該很好地工作在索引中。 –
那是什麼?它會工作,但我不知道我必須使用的類型,你能給我一個代碼especifying它嗎? –
你是什麼意思「我將是真正的內存地址」?如果你想在另一個進程中找到一個特定的地址,你需要補償你的進程相對於另一個進程的16兆的基地址之間的差異。 'offset = address - their_base;無論* var =(無論*)(our_base + offset);' –