AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Binäre Datei analysieren

Ein Thema von goose33 · begonnen am 11. Feb 2005 · letzter Beitrag vom 11. Feb 2005
Antwort Antwort
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#1

Binäre Datei analysieren

  Alt 11. Feb 2005, 01:41
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
Angehängte Dateien
Dateityp: zip newbglfilestructure_352.zip (80,7 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Kernel32.DLL
(Gast)

n/a Beiträge
 
#2

Re: Binäre Datei analysieren

  Alt 11. Feb 2005, 13:28
Zitat von goose33:
Muss ich die Datei nun per TFileStream öffnen oder einfach mit Reset ??
Nimm "ReadFile"...
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 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...
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#3

Re: Binäre Datei analysieren

  Alt 11. Feb 2005, 14:16
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;
  Mit Zitat antworten Zitat
goose33

Registriert seit: 26. Okt 2004
Ort: Merseburg
49 Beiträge
 
#4

Re: Binäre Datei analysieren

  Alt 11. Feb 2005, 16:26
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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