Einzelnen Beitrag anzeigen

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