2011-01-25 3 views
1

Его чтение первых трех адресов справа и последнее неправильно ... Игнорировать код мусора Я noob Я просто не могу понять, почему 4-й адрес не имеет значения, даже если я использую тот же адрес в качестве одного из других возвращает неверное значение ...Проблема с Delphi ReadProcessMemory

procedure ReadFirstCard(Address: Integer); 
var 
Handle,i,a,b,c : Integer; 
begin 
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId); 
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); 
ReadProcessMemory(Handle, Ptr(Address), @NewValue, Data, CardRead); 
CloseHandle(Handle); 
end; 

procedure ReadFirstCardSuit(Address2: Integer); 
var 
Handle,i,a,b,c : Integer; 
begin 
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId); 
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); 
ReadProcessMemory(Handle, Ptr(Address2), @NewValue2, Data2, CardRead2); 
CloseHandle(Handle); 
end; 

procedure ReadSecondCard(Address3: Integer); 
var 
Handle,i,a,b,c : Integer; 
begin 
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId); 
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); 
ReadProcessMemory(Handle, Ptr(Address3), @NewValue3, Data3, CardRead3); 
CloseHandle(Handle); 
end; 

procedure ReadSecondCardSuit(Address4: Integer); 
var 
Handle,i,a,b,c : Integer; 
begin 
GetWindowThreadProcessId(FindWindow(nil, PAnsiChar(Client)), @ProcessId); 
Handle := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessId); 
ReadProcessMemory(Handle, Ptr(Address4), @NewValue4, Data4, CardRead4); 
CloseHandle(Handle); 
end; 

ответ

4

поскольку единственное, что отличается о четвертой функции является то, что он использует Data4 для размера вместо Data1 через Data3, кажется, что Data4 не должны иметь правильное значение для количества байтов для копирования из целевого процесса. Убедитесь, что NewValue4 достаточно большой, чтобы получить весь результат.

Вы не проверяете возвращаемые значения каких-либо из этих функций API, поэтому, если они не работают, вы никогда не узнаете об этом. Убедитесь, что OpenProcess возвращает действительный дескриптор, и убедитесь, что ReadProcessMemory возвращает ненулевое значение. Если они этого не сделают, позвоните GetLastError, чтобы узнать, почему.

+0

Проблема с lol была я читал по многим байтам – Bryan

+0

, если да, то либо принимайте ответ Роба, либо добавляйте свой собственный ответ. – RBA

Смежные вопросы