![]() |
Float Addresse aus RAM laden???
Servus DP,
Wie lade ich eine Float Addresse aus dem RAM??? Ich habs bis jetzt nur für Byte Addressen hin bekommen. Gibts vllt ne RAM Komponente / Unit??? Ich hoffe ihr könnt mir helfen. |
Re: Float Addresse aus RAM laden???
Was verstehst du unter "aus dem RAM laden"?
Delphi-Quellcode:
Und schon hast du sie aus dem RAM geladen und angezeigt.
var
d: Double; begin d := 5.1; ShowMessage(FloatToStr(d)); |
Re: Float Addresse aus RAM laden???
Ich mein Daten eines Spiels.
|
Re: Float Addresse aus RAM laden???
Zitat:
|
Re: Float Addresse aus RAM laden???
Also:
Ich hab ein Spiel. Und von dem möchte ich Daten ausm RAM lesen. Ich hab die Addressen wo ich brauch. Mein Problem ist jetzt wenn die Addresse Byte ist kann ich die problemlos auslesen. Nur bei einer Floataddresse kann ich die nicht auslesen. Die Frage nun: Wie lese ich eine Floataddresse aus dem Arbeitsspeicher??? (wie es zum Beispiel tsearch macht) |
Re: Float Addresse aus RAM laden???
Dir fehlen die allernötigsten Grundlagen. Im Speicher stehen immer nur Byte. Es kommt eben nur darauf an, wie sie interpretiert werden. Eine Bytefolge kann eine Zahl repräsentieren, als auch eine Zeichenkette oder sonst irgendeine Datenstruktur.
|
Re: Float Addresse aus RAM laden???
Das machst du mit
Delphi-Quellcode:
Luckie, ich denke es sollte schon klar sein was Milch wollte.
var
MeinFloatWert: Single; ReadProcessMemory(hProcess, hBase, @MeinFloatWert, SizeOf(MeinFloatWert), dwRead) |
Re: Float Addresse aus RAM laden???
Zitat:
Es werden von der calc.exe 8 Byte, dies entspricht der Größe eines Double = 5.0 x 10^-324 .. 1.7 x 10^308 ausgelesen. Willst du nun die ausgelesenen 8 Bytes einer Double Variablen zuweisen, kannst Du dies einfach mit move(ptrData^, d, SizeOf(Double)) durchführen.
Delphi-Quellcode:
lg. Astatfunction AdjustTokenPrivileges(TokenHandle: THandle; DisableAllPrivileges: BOOL; const NewState: TTokenPrivileges; BufferLength: DWORD; PreviousState: PTokenPrivileges; ReturnLength: PDWORD): BOOL; stdcall; external 'advapi32.dll' name 'AdjustTokenPrivileges' function EnableProcessPrivilege(const Enable: Boolean; const Privilege: string): Boolean; const PrivAttrs: array [Boolean] of DWORD = (0, SE_PRIVILEGE_ENABLED); var Token: THandle; TokenPriv: TTokenPrivileges; begin Result := False; if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, Token) then begin TokenPriv.PrivilegeCount := 1; LookupPrivilegeValue(nil, PChar(Privilege), TokenPriv.Privileges[0].Luid); TokenPriv.Privileges[0].Attributes := PrivAttrs[Enable]; AdjustTokenPrivileges(Token, False, TokenPriv, SizeOf(TokenPriv), nil, nil); Result := GetLastError = ERROR_SUCCESS; CloseHandle(Token); end; end; function MemRead(PID: DWORD; ptrOffset: Pointer; cbData: DWORD): Pointer; stdcall; var cbRead: DWORD; hProc: THandle; begin result := nil; if not EnableProcessPrivilege(true, 'SeDebugPrivilege') then RaiseLastWin32Error; hProc := OpenProcess(PROCESS_VM_READ ,False , PID); if hProc <> 0 then begin GetMem(Result, cbData); if not ReadProcessMemory(hProc, ptrOffset, Result, cbData, cbRead) then RaiseLastWin32Error; CloseHandle(hProc); end else RaiseLastWin32Error; end; function BinToHexStr(AData: Pointer; ADataLen: Integer): String; const HEX_DIGITS: array [0..15] of Char = '0123456789ABCDEF'; var LSrc: PChar; i: Integer; Begin LSrc := AData; SetString(Result, NIL, ADataLen * 2); for i := 0 to ADataLen -1 do begin Result[i * 2 + 1] := HEX_DIGITS[ord(LSrc^) shr 4]; Result[i * 2 + 2] := HEX_DIGITS[ord(LSrc^) and $F]; inc(LSrc); end; End; var ptrData: Pointer; hWindow: HWND; dwPID: DWORD; d: Double; begin hWindow := FindWindow(nil, 'Rechner'); if hWindow <> 0 then begin if GetWindowThreadProcessId(hWindow ,@dwPID) <> 0 then begin ptrData := MemRead(dwPID, ptr($01000010), 8); move(ptrData^, d, SizeOf(Double)); writeln(FloatToStr(d)); writeln(BinToHexStr(ptrData, 8)); FreeMem(ptrData); end else RaiseLastWin32Error; end else RaiseLastWin32Error; readln; end. |
Re: Float Addresse aus RAM laden???
Wie kann ich diesen Wert jetzt noch in einen String umwandeln???
|
Re: Float Addresse aus RAM laden???
Zitat:
![]() Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz