Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Binäre Datei analysieren (https://www.delphipraxis.net/40114-binaere-datei-analysieren.html)

goose33 11. Feb 2005 01:41


Binäre Datei analysieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich hab wiedermal ein Problem:

Es geht darum eine Datei ( bin ) zu analysieren.
Dabei handelt es sich ( wiedermal ) um eine Datei aus dem Flugsimulator 2004 ( FS ) und zwar
eine *.bgl Datei. In diesen Dateien sind informationen zu allen Scenerie Objekten enthalten, also alles was man sieht wenn man im FS aus dem Fenster schaut.

Nun hab ich dazu auch ein *.pdf was den Header der Datei und die enthaltenen Daten Beschreibt.
Leider komme ihc nicht wirklich damit klar, mir fehlt wiedermal der Ansatz, also wie ich sowas überhaupt angehen muss ?

Muss ich die Datei nun per TFileStream öffnen oder einfach mit Reset ??
Was bedeuten die ganzen Offsets in der Beschreibung ?
Was bedeutet eine Variable namens DWORD[3] ??
Was bedeuten die contents in der letzten Spalte der Tabelle ??
number of section pointers in header ?? Schön und nu ?? Wo find ich die denn dann ?

Das haben die irgendwie vergessen hinzuschreiben in der Hilfe. Die schreiben zwar was es ist doch nicht was man damit anfängt und wie man damit umgehen soll.
Genau das ist aber das Problem ??

Wäre echt nett,wenn mir jemand sagen könnte wo und wie ich da anfangen muss ?

Danke Euch !!
Matthias

Kernel32.DLL 11. Feb 2005 13:28

Re: Binäre Datei analysieren
 
Zitat:

Zitat von goose33
Muss ich die Datei nun per TFileStream öffnen oder einfach mit Reset ??

Nimm "ReadFile"...
Zitat:

Zitat von goose33
Was bedeuten die ganzen Offsets in der Beschreibung ?

Das sind die Adressen in der Datei, sprich die Nummer des bytes, nach dem der Wert anfängt.

Bsp.:
Offset: 8;
Count: 4;

Nach dem 8. Byte müssen 4 Bytes gelesen werden.
(Hoffentlich stimmt das so...)
Zitat:

Zitat von goose33
number of section pointers in header ?? Schön und nu ?? Wo find ich die denn dann ?

Das weiß ich auch nicht, aber hast du den Autor schonmal gefragt?
"Winfried Orthmann" klingt ziemich deutschsprachig.... Vllt. mailst du ihm mal...

Oxmyx 11. Feb 2005 14:16

Re: Binäre Datei analysieren
 
Zitat:

Zitat von goose33
Muss ich die Datei nun per TFileStream öffnen oder einfach mit Reset ??

Öffne die Datei mit einem TFileStream-Objekt und lese die Daten mit TFileStream.Read.
Zitat:

Was bedeuten die ganzen Offsets in der Beschreibung ?
Die geben an, wo die Daten in der Datei anfangen.
Zitat:

Was bedeutet eine Variable namens DWORD[3] ??
Drei DWORD-Variablen.
Zitat:

Was bedeuten die contents in der letzten Spalte der Tabelle ??
Das steht in den Variablen drin, anhand der Kennung wird die Datei identifiziert. Die müssen so stimmen, sonst wird der FS einen Fehler ausgeben.
Zitat:

number of section pointers in header ?? Schön und nu ?? Wo find ich die denn dann ?
Ich vermute die findest du direkt nach dem Dateiheader. Der Satz "The new BGL file header consists of a fixed part with the length of 0x38 (54) bytes and a variable number of section pointers." lässt mich darauf spekulieren, dass ab dem 54. Byte die Section Pointers kommen.

Du könntest dir Records anlegen, und diese dann einlesen:

Delphi-Quellcode:
TFixedFileHeader = packed record
  wID: Word;
  wVersion: Word;
  dwSizeOfHeader: DWord;
  adwUnknown: array[0..2] of DWord;
  dwNumSectionPointers: DWord;
  aUnknown: array[0..29] of Byte;
end;

TSectionPointer = packed record
  dwType: DWord;
  dwUnknown: DWord;
  dwNumSubSecPtrs: DWord;
  dwOffsToSecHdr: DWord;
  dwSizeOfSecHdr: DWord;
end;


{...}
var
  pFile: TFileStream;
  FileHdr: TFixedFileHeader;
  aSecPtr: array of TSectionPointer;
  i: Integer;
begin
  pFile := TFileStream.Create('datei.bgl');
  // Dateiheader einlesen
  pFile.Read(FileHdr, sizeof(TFixedFileHeader));

  SetLength(aSecPtr, FileHdr.dwNumSectionPointers);

  // Alle Section Pointers einlesen
  for i := 0 to FileHdr.dwNumSectionPointers-1 do
    pFile.Read(aSecPtr[i], sizeof(TSectionPointer));
end;

goose33 11. Feb 2005 16:26

Re: Binäre Datei analysieren
 
Hallo,

erst mal vielen dank für die Antwort !
Wenn man sowas noch nicht gemacht hat ist das gar nicht so leicht, aber
mit dem Beispiel komme ich nachher sicher ein ganzes Stück weiter...DANKE!

Eine Frage hab ich allerdings noch dazu :


Delphi-Quellcode:
  // Alle Section Pointers einlesen
  for i := 0 to FileHdr.dwNumSectionPointers-1 do
    pFile.Read(aSecPtr[i], sizeof(TSectionPointer));
An welcher stelle von der Datei wird denn da gelesen ?
Das hab ich noch nicht wirklich kapiert.
Bei dem Header is das ja schon klar, aber die anderen Header stehen ja irgendwo
anders in der Datei, bzw fangen irgendwo anders an.
Das soll ja dann das offset sein so wie ich das verstanden habe.

Oder lieg ich da falsch ?

Matthias


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