unit MemoryDeclaration;
interface
uses Addresses, Classes, SysUtils, Windows, Messages, Variants, Dialogs;
function ReadInteger(ProcessID, Address: Cardinal): Cardinal;
function ReadString(ProcessID, Address: Integer): String;
function ReadByte(ProcessID, Address: Cardinal): Byte;
function BLPosition(ProcessID: Cardinal): Integer;
procedure WriteInteger(IDProcess, Address: Integer; Value: Integer);
procedure WriteString(IDProcess, Address: Integer; Value: String);
procedure WriteByte(IDProcess, Address: Integer; Value: Byte);
implementation
function ReadInteger(ProcessID, Address: Cardinal): Cardinal;
var
tProc: THandle;
NBR: Cardinal;
value: integer;
begin
tProc := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessID);
ReadProcessMemory(tProc, Ptr(Address), @value, 4, NBR);
CloseHandle(tProc);
Result := value;
end;
function ReadByte(ProcessID, Address: Cardinal): Byte;
var
tProc: THandle;
NBR: Cardinal;
value: Byte;
begin
tProc := OpenProcess(PROCESS_ALL_ACCESS, False, ProcessID);
ReadProcessMemory(tProc, Ptr(Address), @value, 1, NBR);
CloseHandle(tProc);
Result := value;
end;
function ReadString(ProcessID, Address: Integer): String;
var
NB : LongWord;
Temp : ARRAY [1..255] OF Byte;
I : Byte;
IDProcess : Cardinal;
begin
IDProcess := OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
Result := '';
ReadProcessMemory(IDProcess, Ptr(Address), @Temp[1], 255, NB);
for I := 1 to 255 do
begin
if ((Temp[i] = 0) or (Temp[i] = $0F)) then
Break;
Result := Result + Chr(Temp[i]);
end;
end;
function BLPosition(ProcessID: Cardinal): Integer;
var
i,id_battle,id:integer;
begin
if ReadInteger(ProcessID, Addresses.c_Status) = 8 then
begin
id:=ReadInteger(ProcessID, addresses.p_Id);
for i:=0 to 1299 do
Begin
id_battle:=ReadInteger(ProcessID, Addresses.bl_Start + i*Addresses.bl_StepCreatures);
if id_battle=ID then
Begin
Result :=i;
end;
end;
end
else
begin
Result := -1;
end;
end;
procedure WriteInteger(IDProcess, Address: Integer; Value: Integer);
var
THandle: Integer;
e: DWORD;
begin
THandle := OpenProcess(PROCESS_ALL_ACCESS, False, IDProcess);
WriteProcessMemory(THandle, Ptr(Address), @Value, 4, e);
CloseHandle(THandle);
end;
procedure WriteString(IDProcess, Address: Integer; Value: String);
var
THandle: hWnd;
e: DWORD;
begin
THandle := OpenProcess(PROCESS_ALL_ACCESS, False, IDProcess);
WriteProcessMemory(THandle, Pointer(Address), PChar(Value), Length(Value), e);
CloseHandle(THandle);
end;
procedure WriteByte(IDProcess, Address: Integer; Value: Byte);
var
THandle: hWnd;
e: DWORD;
begin
THandle := OpenProcess(PROCESS_ALL_ACCESS, False, IDProcess);
WriteProcessMemory(THandle, Pointer(Address), PByte(Value), 1, e);
CloseHandle(THandle);
end;
end.
dW5pdCBNZW1vcnlEZWNsYXJhdGlvbjsKCmludGVyZmFjZQoKdXNlcyBBZGRyZXNzZXMsIENsYXNzZXMsIFN5c1V0aWxzLCBXaW5kb3dzLCBNZXNzYWdlcywgVmFyaWFudHMsIERpYWxvZ3M7CgpmdW5jdGlvbiBSZWFkSW50ZWdlcihQcm9jZXNzSUQsIEFkZHJlc3M6IENhcmRpbmFsKTogQ2FyZGluYWw7CmZ1bmN0aW9uIFJlYWRTdHJpbmcoUHJvY2Vzc0lELCBBZGRyZXNzOiBJbnRlZ2VyKTogU3RyaW5nOwpmdW5jdGlvbiBSZWFkQnl0ZShQcm9jZXNzSUQsIEFkZHJlc3M6IENhcmRpbmFsKTogQnl0ZTsKZnVuY3Rpb24gQkxQb3NpdGlvbihQcm9jZXNzSUQ6IENhcmRpbmFsKTogSW50ZWdlcjsKcHJvY2VkdXJlIFdyaXRlSW50ZWdlcihJRFByb2Nlc3MsIEFkZHJlc3M6IEludGVnZXI7IFZhbHVlOiBJbnRlZ2VyKTsKcHJvY2VkdXJlIFdyaXRlU3RyaW5nKElEUHJvY2VzcywgQWRkcmVzczogSW50ZWdlcjsgVmFsdWU6IFN0cmluZyk7CnByb2NlZHVyZSBXcml0ZUJ5dGUoSURQcm9jZXNzLCBBZGRyZXNzOiBJbnRlZ2VyOyBWYWx1ZTogQnl0ZSk7CgppbXBsZW1lbnRhdGlvbgoKZnVuY3Rpb24gUmVhZEludGVnZXIoUHJvY2Vzc0lELCBBZGRyZXNzOiBDYXJkaW5hbCk6IENhcmRpbmFsOwp2YXIKICB0UHJvYzogVEhhbmRsZTsKICBOQlI6IENhcmRpbmFsOwogIHZhbHVlOiBpbnRlZ2VyOwpiZWdpbgogIHRQcm9jIDo9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRmFsc2UsIFByb2Nlc3NJRCk7CiAgUmVhZFByb2Nlc3NNZW1vcnkodFByb2MsIFB0cihBZGRyZXNzKSwgQHZhbHVlLCA0LCBOQlIpOwogIENsb3NlSGFuZGxlKHRQcm9jKTsKICBSZXN1bHQgOj0gdmFsdWU7CmVuZDsKCmZ1bmN0aW9uIFJlYWRCeXRlKFByb2Nlc3NJRCwgQWRkcmVzczogQ2FyZGluYWwpOiBCeXRlOwp2YXIKICB0UHJvYzogVEhhbmRsZTsKICBOQlI6IENhcmRpbmFsOwogIHZhbHVlOiBCeXRlOwpiZWdpbgogIHRQcm9jIDo9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRmFsc2UsIFByb2Nlc3NJRCk7CiAgUmVhZFByb2Nlc3NNZW1vcnkodFByb2MsIFB0cihBZGRyZXNzKSwgQHZhbHVlLCAxLCBOQlIpOwogIENsb3NlSGFuZGxlKHRQcm9jKTsKICBSZXN1bHQgOj0gdmFsdWU7CmVuZDsKCmZ1bmN0aW9uIFJlYWRTdHJpbmcoUHJvY2Vzc0lELCBBZGRyZXNzOiBJbnRlZ2VyKTogU3RyaW5nOwp2YXIKICBOQiA6IExvbmdXb3JkOwogIFRlbXAgOiBBUlJBWSBbMS4uMjU1XSBPRiBCeXRlOwogIEkgOiBCeXRlOwogIElEUHJvY2VzcyA6IENhcmRpbmFsOwpiZWdpbgogIElEUHJvY2VzcyA6PSBPcGVuUHJvY2VzcyhQUk9DRVNTX0FMTF9BQ0NFU1MsIGZhbHNlLCBQcm9jZXNzSUQpOwogIFJlc3VsdCA6PSAnJzsKICBSZWFkUHJvY2Vzc01lbW9yeShJRFByb2Nlc3MsIFB0cihBZGRyZXNzKSwgQFRlbXBbMV0sIDI1NSwgTkIpOwogIGZvciBJIDo9IDEgdG8gMjU1IGRvCiAgYmVnaW4KICAgIGlmICgoVGVtcFtpXSA9IDApIG9yIChUZW1wW2ldID0gJDBGKSkgdGhlbgogICAgICBCcmVhazsKICAgIFJlc3VsdCA6PSBSZXN1bHQgKyBDaHIoVGVtcFtpXSk7CiAgZW5kOwplbmQ7CgpmdW5jdGlvbiBCTFBvc2l0aW9uKFByb2Nlc3NJRDogQ2FyZGluYWwpOiBJbnRlZ2VyOwp2YXIKICBpLGlkX2JhdHRsZSxpZDppbnRlZ2VyOwpiZWdpbgogIGlmIFJlYWRJbnRlZ2VyKFByb2Nlc3NJRCwgQWRkcmVzc2VzLmNfU3RhdHVzKSA9IDggdGhlbgogIGJlZ2luCiAgaWQ6PVJlYWRJbnRlZ2VyKFByb2Nlc3NJRCwgYWRkcmVzc2VzLnBfSWQpOwogIGZvciBpOj0wIHRvIDEyOTkgZG8KICBCZWdpbgogICAgaWRfYmF0dGxlOj1SZWFkSW50ZWdlcihQcm9jZXNzSUQsIEFkZHJlc3Nlcy5ibF9TdGFydCArIGkqQWRkcmVzc2VzLmJsX1N0ZXBDcmVhdHVyZXMpOwogICAgaWYgaWRfYmF0dGxlPUlEIHRoZW4KICAgIEJlZ2luCiAgICAgIFJlc3VsdCA6PWk7CiAgICAgIGV4aXQ7CiAgICBlbmQ7CiAgZW5kOwogIGVuZAogIGVsc2UKICBiZWdpbgogICAgUmVzdWx0IDo9IC0xOwogIGVuZDsKZW5kOwoKcHJvY2VkdXJlIFdyaXRlSW50ZWdlcihJRFByb2Nlc3MsIEFkZHJlc3M6IEludGVnZXI7IFZhbHVlOiBJbnRlZ2VyKTsKdmFyCiAgVEhhbmRsZTogSW50ZWdlcjsKICBlOiBEV09SRDsKYmVnaW4KICBUSGFuZGxlIDo9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRmFsc2UsIElEUHJvY2Vzcyk7CiAgV3JpdGVQcm9jZXNzTWVtb3J5KFRIYW5kbGUsIFB0cihBZGRyZXNzKSwgQFZhbHVlLCA0LCBlKTsKICBDbG9zZUhhbmRsZShUSGFuZGxlKTsKZW5kOwoKcHJvY2VkdXJlIFdyaXRlU3RyaW5nKElEUHJvY2VzcywgQWRkcmVzczogSW50ZWdlcjsgVmFsdWU6IFN0cmluZyk7CnZhcgogIFRIYW5kbGU6IGhXbmQ7CiAgZTogRFdPUkQ7CmJlZ2luCiAgVEhhbmRsZSA6PSBPcGVuUHJvY2VzcyhQUk9DRVNTX0FMTF9BQ0NFU1MsIEZhbHNlLCBJRFByb2Nlc3MpOwogIFdyaXRlUHJvY2Vzc01lbW9yeShUSGFuZGxlLCBQb2ludGVyKEFkZHJlc3MpLCBQQ2hhcihWYWx1ZSksIExlbmd0aChWYWx1ZSksIGUpOwogIENsb3NlSGFuZGxlKFRIYW5kbGUpOwplbmQ7Cgpwcm9jZWR1cmUgV3JpdGVCeXRlKElEUHJvY2VzcywgQWRkcmVzczogSW50ZWdlcjsgVmFsdWU6IEJ5dGUpOwp2YXIKICBUSGFuZGxlOiBoV25kOwogIGU6IERXT1JEOwpiZWdpbgogIFRIYW5kbGUgOj0gT3BlblByb2Nlc3MoUFJPQ0VTU19BTExfQUNDRVNTLCBGYWxzZSwgSURQcm9jZXNzKTsKICBXcml0ZVByb2Nlc3NNZW1vcnkoVEhhbmRsZSwgUG9pbnRlcihBZGRyZXNzKSwgUEJ5dGUoVmFsdWUpLCAxLCBlKTsKICBDbG9zZUhhbmRsZShUSGFuZGxlKTsKZW5kOwoKZW5kLg==