Hallo,
habe soeben versucht einen String einer EXE zu ersetzen, dazu habe ich die von Luckie bereitgestellte procedure verwendet:
Delphi-Quellcode:
var
f: File;
cntWritten: Integer;
cntRead: Integer;
buffer: Array of Byte;
begin
AssignFile(f, extractfilepath(paramstr(0)) + 'output.exe');
{$I-}
Reset(f);
if IOResult = 0 then
begin
SetLength(buffer, Length(fstr));
BlockRead(f, buffer[0], Length(fstr), cntRead);
ShowMessage('Gelesener Text: ' + string(buffer) + '. Gelesene Bytes: ' + IntToStr(cntRead));
CloseFile(f);
end
else
ShowMessage(SysErrorMessage(GetLastError));
{$I+}
AssignFile(f, extractfilepath(paramstr(0)) + 'output.exe');
{$I-}
Rewrite(f);
if IOResult = 0 then
begin
BlockWrite(f, fstr[1], Length(fstr), cntWritten);
ShowMessage('Geschrieben Bytes: '+IntToStr(cntWritten));
CloseFile(f);
end
else
ShowMessage(SysErrorMessage(GetLastError));
{$I+}
end;
Dummerweise ist die EXE nach ausführen des obigen codes immer leer(0kb).
Vorhaben:
1. EXE-Datei mit FileToStr in einen String lesen.
2. Mit meiner Funktion einen beliebigen String in der EXE suchen und ersetzen
3. Die alte EXE mit dem neuen String(den bearbeiteten EXE-String) mit Blockwrite überschreiben.
Hat jemand bessere Ideen? Ich habe es selbstverständlich auch schon so gemacht, dass ich eine Textdatei, in die ich normale
ASCII Zeichen hineingeschrieben hab einfach in .exe umbenannt habe..
Hier ersetze ich den String:
Delphi-Quellcode:
function TFormL.searchex(ssearch,sfile,strrep : string) : string;
var
ipos: Integer;
search : Treplaceflags;
begin
search := [rfReplaceAll, rfIgnoreCase];
result := StringReplace(sfile,ssearch,strrep,search);
end;
ssearch : Der Suchbegriff(String)
sFile : Der schon eingelesene String der EXE-Datei
strrep : Der String der ssearch ersetzen soll
Und hier die procedure zum Überschreiben:
Delphi-Quellcode:
procedure TFormL.WriteEx;
var
f: File;
cntWritten: Integer;
cntRead: Integer;
buffer: Array of Byte;
begin
AssignFile(f, extractfilepath(paramstr(0))+'test.exe');
{$I-}
Rewrite(f);
if IOResult = 0 then
begin
BlockWrite(f, fstr[1], Length(fstr), cntWritten);
CloseFile(f);
end
else
ShowMessage(SysErrorMessage(GetLastError));
{$I+}
end;
Hoffe hier weiß jemand wo der Fehler liegt.