Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi im HEX-Code geänderte Datei wieder speichern? (https://www.delphipraxis.net/123574-im-hex-code-geaenderte-datei-wieder-speichern.html)

buster55 4. Nov 2008 19:22


im HEX-Code geänderte Datei wieder speichern?
 
Moin
Ich öffne eine exe Datei mit Delphi und lasse ihren Hexcode anzeigen, das klappt auf wunderbar, er wird in einer memo sichtbar gemacht. Nun bearbeitet mein Programm den Hexcode, was auch klappt. Nun möchte ich die Veränderungen aber auch auf die Ursprungsdatei übertragen, möchte also aus dem ganzen bearbeiteten ($65 $6F $20 $54 $01 $EC $00 $49.............) Gewirr wieder eine exe machen. Ich kann ja schlecht
Delphi-Quellcode:
memo.lines.savetofile('C:\hex.exe')
schreiben ;-)

bitte um Hilfe und Codebsps.


danke im Vorraus

mkinzler 4. Nov 2008 19:23

Re: im HEX-Code geänderte Datei wieder speichern?
 
Warum nicht?

MSSSSM 4. Nov 2008 19:25

Re: im HEX-Code geänderte Datei wieder speichern?
 
Weil im Memo nur der HexCode steht ;)

buster55 4. Nov 2008 19:32

Re: im HEX-Code geänderte Datei wieder speichern?
 
du kannst ja auch nicht einen Delphi Quellcode einfach in ner .exe speichern :wink:

SirThornberry 4. Nov 2008 19:32

Re: im HEX-Code geänderte Datei wieder speichern?
 
Irgendwie liest du die Datei ja auch aus und lässt dir das ganze in hex darstellen. Wenn du diesen Quelltext dir selbst erarbeitet hast dürfte es doch nicht das Problem sein in umgekehrte Richtung das ganze wieder zu speichern?! :gruebel:

buster55 4. Nov 2008 19:44

Re: im HEX-Code geänderte Datei wieder speichern?
 
wenn dem so wäre :(
Allerdings ist die Welt der binär und hexdezimal Codes für mich absolutes Neuland, deshalb habe ich den Code der den hexcode ließt nicht selbst geschreiben:
Delphi-Quellcode:
var
  fs: TFileStream;
  Buffer: TMyByteArray;
  BytesRead: Longint;
  s: string;
  i: Int64;
  HexLength: Integer;
begin
  i := 0;
  SetLength(Buffer, BUFFERSIZE);
  fs := TFileStream.Create(edit1.text,
    fmOpenRead);
  HexLength := Length(HEXPREFIX) + 2 + Length(HEXSUFFIX);
  SetLength(s, fs.size * HexLength);
  Progressbar1.Max := fs.Size div BUFFERSIZE;
  try
    repeat
      BytesRead := fs.Read(Buffer[0], BUFFERSIZE);
      Move(BuffToHex(Buffer)[1], s[i * (HexLength * BUFFERSIZE) + 1],
        HexLength * BytesRead);
      Inc(i);
      Progressbar1.StepIt;
      Application.ProcessMessages;
    until BytesRead < BUFFERSIZE;
    memo1.SelText := s;
  finally
    FreeAndNil(fs);
  end;

ErazerZ 4. Nov 2008 19:56

Re: im HEX-Code geänderte Datei wieder speichern?
 
Folgender Code schreibt einfach Hex Zeichen in einer Datei. Wobei zuerst in einem StringList gespeichert wird (hab ich nur jetzt ganz schnell zusammengetippt, natürlich kannst es besser machen wenns magst). Die Zeichen werden danach in einem array von bytes gespeichert und das wird dann in einer Datei geschrieben.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  n, len: Integer;
  s: string;
  sl: TStringList;
  ba: array of Byte;
  fs: TFileStream;
begin
  len := 0;
  sl := TStringList.Create;
  s := Memo1.Text;
  s := StringReplace(s, '$', '', [rfReplaceAll]);
  s := StringReplace(s, '0x', '', [rfReplaceAll]);
  sl.Delimiter := ' ';
  sl.DelimitedText := s;
  SetLength(ba, sl.Count);
  for n := 0 to sl.Count -1 do
  begin
    ba[n] := StrToInt('$' + sl[n]);
  end;
  sl.Free;
  fs := TFileStream.Create('c:\okay.txt', fmOpenWrite or fmCreate);
  fs.Write(Pointer(ba)^, Length(ba));
  fs.Free;
end;

buster55 4. Nov 2008 20:09

Re: im HEX-Code geänderte Datei wieder speichern?
 
Funktioniert Perfekt!
natürlich nicht okay.txt sondern .exe
Dickes THX!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz