Hier habe ich eine Funktion, die soll an der Adresse XY einen Wert ändern.
Der User soll in Editfelder die Adresse, den Wert und die Länge angeben.
Delphi-Quellcode:
var
Form1: TForm1;
ProzessName : String = 'Projekt1.exe';
implementation
{$R *.dfm}
//Funcktion
function SchreibeInAdresse( Adresse : Integer; Value: PChar; LengthValu : Byte) : Boolean;
var
ProcessId, Write : Cardinal;
hProcSnap: THandle;
PE32: TProcessEntry32;
ProzessListe : TStringList;
Snap: THandle;
ProcessE: TProcessEntry32;
begin
ProzessListe := TStringList.Create;
//* Prozess bereits am laufen?
ProzessListe.Clear;
Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
try
ProcessE.dwSize := SizeOf(ProcessE);
if Process32First(Snap, ProcessE) then
Repeat
ProzessListe.Add(ProcessE.szExeFile);
Until not Process32Next(Snap, ProcessE)
else
RaiseLastOSError;
finally
CloseHandle(Snap);
end;
if ProzessListe.IndexOf(ProzessName) < 0 then
begin
MessageDlg('Programm nicht gestartet.', mtWarning, [mbOK], 0);
Exit;
end;
//* ProzessID auslesen
hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
if hProcSnap = INVALID_HANDLE_VALUE then
Exit;
PE32.dwSize := SizeOf(ProcessEntry32);
if Process32First(hProcSnap, PE32) = true then
while Process32Next(hProcSnap, PE32) = true do
begin
if pos(ProzessName, pe32.szExeFile) <> 0then
ProcessId := PE32.th32ProcessID;
end;
CloseHandle(hProcSnap);
//* In Adresse schreiben
ProcessId := OpenProcess(PROCESS_ALL_ACCESS,False,ProcessId);
WriteProcessMemory(ProcessId,Ptr( Adresse ), Value , LengthValu ,Write);
CloseHandle(ProcessId);
end;
Aufgerufen wird das bis jetzt so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
SchreibeInAdresse( StrToInt('$'+ '243AEC3C'), '#2', StrToint('1'));
end;
Habe die Werte direkt eingetragen und nicht durch Edit1, dsa kommt später, aber wie geht das nun? Das Problem liegt beim Value, aber wie kann ich das denn nun zum laufen bringen?
Du derefernzierst p2 einmal und weißt die Adresse von i zu. Das heißt p2 (also der Zeiger auf einen Zeiger) zeigt auf den Zeiger p1 welchen du so auf i zeigen lässt.