Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Eine Datei auf Größe prüfen und Hexadezimalwerte verändern (https://www.delphipraxis.net/4390-eine-datei-auf-groesse-pruefen-und-hexadezimalwerte-veraendern.html)

Rapthor 27. Apr 2003 13:14


Eine Datei auf Größe prüfen und Hexadezimalwerte verändern
 
Also ich habe eine EXE Datei und will die an 2 Offsets verändern. Diese Offsets seien bekannt. Welche Befehle brauch ich denn da in Delphi?
Vor dem Ändern jedoch soll noch überprüft werden, ob die Datei eine bestimmte bitgenaue Größe hat.
Ich will so eine Art PATCH Engine damit programmieren.
Danke, Rapthor!

Christian Seehase 27. Apr 2003 13:27

Moin Rapthor,

einfach mit TFileStream öffnen, und an den gewünschten Stellen (z.b. mit der Eigenschaft Position zu erreichen) die Werte ändern (Write).

Da die kleinste Speichereinheit ein Byte ist wirst Du Dich wohl mit bytegenauer Grösse zufrieden geben müssen. (TFileStream.Size)

Rapthor 27. Apr 2003 13:49

Und mit welchem Befehl öffne ich die Datei genau?
TFileStream.Open geht z.B. nicht und aus der Hilfe werd ich auch nicht schlau.Dieses TFileStream.Create muss ich mit welchen Parametern vorher ausführen?

Christian Seehase 27. Apr 2003 14:22

Moin Rapthor,

das steht doch in der Hilfe:
Pfad der Datei die zu öffnen ist, und wie die Datei geöffnet werden soll, in Deinem Falle also wohl fmOpenReadWrite.

Rapthor 27. Apr 2003 15:45

So Datei wurde geöffnet und ich bin sogar schon per Seek an ein gewisses Offset gesprungen ... wie kann ich jetzt den Hexadezimalwert an dieser Stelle ändern?
Meinetwegen ist das Offset 000eba4e und als Wert hab ich 74 ..... ich will daraus ne 75 machen. Wie das?

Christian Seehase 27. Apr 2003 15:48

Moin Rapthor,

falls Dich der ursprüngliche Wert interessiert mit Read lesen, schreiben in jedem Falle mit Write.

Da das ja auch in der Hilfe steht:
An welcher Stelle liegt jetzt Dein Verständnisproblem?

Rapthor 27. Apr 2003 15:52

an folgender:

Als Argumente für Write stehen "const Buffer" und "Count: Integer".
Wozu brauch ich nen Buffer und was soll das Count?
Welche der beiden Einträge entspricht denn dem geänderten Wert und wozu brauch ich dann den anderen.. so ganz klar is mir das nicht aus der Hilfe.

Christian Seehase 27. Apr 2003 15:59

Moin Rapthor,

der Parameter Buffer bezeichnet die Variable, in die die Daten eingelesen werden, bzw. aus der sie in die Datei geschrieben werden.
Hierfür kannst Du an Datentypen verwenden, was auch immer Du willst, da der Typ hier nicht vorgegeben ist.
In Deinem Falle wäre das wohl am sinnvollsten Byte.
(Das, je nach verwendetetem Typ, noch bestimmte Dinge zu beachten sind, will ich hier nur erwähnt haben)
Mit Count wird nun angegeben, wieviele Byte von Buffer geschrieben, bzw. aus der Datei gelesen werden sollen. Nicht immer soll ja der gesamte Bufferinhalt in der Datei landen, geschweige denn aus der Datei gelesen werden.

In Deinem Falle könnte das also so aussehen:


Delphi-Quellcode:
bBuffer : Byte;

Read(bBuffer,1);

// bzw.

Write(bBuffer,1);


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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