0

プロセスから 16 MB (FFFFFF) のメモリを読み取り、それを配列に格納します。配列内を検索すると、配列 [i] のように、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());
        }
}

なにが問題ですか??誰かが私を助けることができますか?なぜうまくいかないのか

4

1 に答える 1

1

このようなものが欲しいですか?

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];
    }
};

real address配列内のインデックスにマップします

offset_buffer b(buffer, address);

if (b[0x0C2F8E3] == 123) return 0x0C2F8E3;
于 2012-05-15T06:51:13.377 に答える