Binärdatei Felder vom Hexdump interpretieren

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.

Binärdatei Felder vom Hexdump interpretieren

Beitragvon lazagui » 1. Nov 2018, 11:03 Binärdatei Felder vom Hexdump interpretieren

Hallo zusammen,

ich hoffe ich bin hier im richtigen Unterforum.

Ich habe eine binäre dtb-Datei die mit TurboPascal erstellt wurde (s. Hexdump im Anhang). Satzlänge ist 237 Bytes. Da sind binäre, double oder float Felder drin von denen ich die Werte ermitteln müsste. Kann mir jemand einen Tipp geben wo ich nachlesen kann wie ich diesen Hexdump interpretieren muss?

Gruß lazagui

P.S. Ich habe NATÜRLITSCH keine Doku der Datenstruktur :-)
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
lazagui
 
Beiträge: 6
Registriert: 11. Feb 2015, 00:07

Beitragvon siro » 1. Nov 2018, 16:59 Re: Binärdatei Felder vom Hexdump interpretieren

Hallo,
ohne spezielles Wissen, zumindest wie viele Daten da drin versteckt sind, ist das natürlich ziemlich aussichtslos.
Zumindest erkennt man schon, dass es sich wohl tatächlich um Turbo-Pascal handeln könnte.
Das Wort Rechnung taucht ja als Ascii Kette auf.
Bei Turbo-Pascal befindet sich vor dem Text immer das Längenbyte.
Das ist hier ein 8 weil "Rechnung" 8 Buchtstaben hat.

Dann taucht dort "DM" auf, hier ist aber das vordere Byte eine 3.
Hier ist es aber möglich, dass der Datensatz 3 Buchstaben vorgesehen hat für die Währung.
Das ist natürlich alles nur reine Spekulation...

Das Hexzeichen "0A" ist ja eigentlich ein LineFeed, also ein Zeilenumbruch bei Texten.
Wenn man sich den Hexcode so anschaut, könnten diese Zeichen eventuell ein Feld beenden.

Mit Floats wird dann schwieriger,
Ein Float in Pascal war ja früher vom Typ Real
http://www.shikadi.net/moddingwiki/Turbo_Pascal_Real
später gabs dann Extended usw.

Word und Integer waren 16 Bit.
Normalerweise im Intelformat, das bedeutet zuerst das Low Byte und dann das High Byte.

Viel mehr kann ich Dir da auch nicht weiter helfen....
woher weisst Du denn das der Block 237 Byte groß ist ?

Hast Du das nicht schon vor 3 Jahren hier gefragt :wink:
https://www.lazarusforum.de/viewtopic.p ... mobile=off

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
siro
 
Beiträge: 315
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

Beitragvon Mathias » 1. Nov 2018, 18:09 Re: Binärdatei Felder vom Hexdump interpretieren

Ich habe eine binäre dtb-Datei die mit TurboPascal erstellt wurde

Hast du die alte Turbo-Pascal Source nicht mehr ?
Dann wäre es sehr einfach.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4342
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon lazagui » 2. Nov 2018, 16:33 Re: Binärdatei Felder vom Hexdump interpretieren

Hallo Mathias,

danke für Tipps. Wenn ich die Source hätte ( ja das wär schön), dann bräuchte ich hier nicht zu fragen :D :D :D .
Die Satzlänge kann man durch Auszählen der regelmäßig wiederkehrenden Felder ermitteln. Im Anhang hab ich nur mal einen einzelnen Beispielsatz kopiert. CR, Newline, also 0A0D und so was gibts für RECORDS nicht. Die sind ohne Trennzeichen aneinandergereiht. Es gibt [datei].dtb, [datei].idx und [datei].dia.

Ich versuch mal ob mit Low und High-Byte weiterkomme.

Und ja vor 3 jahren lag das Thema schon mal auf meinem Tisch. :D :D :D

Gruß Mike
lazagui
 
Beiträge: 6
Registriert: 11. Feb 2015, 00:07

Beitragvon siro » 2. Nov 2018, 19:31 Re: Binärdatei Felder vom Hexdump interpretieren

Ich würde das wahrscheinlich so angehen:
Code: Alles auswählen
 
const BlockSize = 237// Anzahl Bytes einse Datensatzes
 
// ein Variantenrecord:
Type TData = record
  case BYTE of
      0 : (all:array[0..BLOCKSIZE-1] of byte);    // der gesamte Datenblock
      1 : (pre:Array[0..10] of Byte;              // Bytes die testweise übersprungen werden sollen
           value : Integer);                      // ein Integer Wert, der evtl, hier liegen könnte
  end;
 
var data:TData;  // ein kompletter Datensatz wird immer eingelesen
 
procedure Auswerten;
var f:File;
var readed:Integer;
begin
  AssignFile(f,'Test.dtb');          // Datei öffnen
  Reset(f,1);                        // Datei auf Anfang setzen
  Repeat                                    // Wiederholt ausführen
    BlockRead(f,data,BlockSize,readed);     // ganzen Block einlesen
    Writeln(IntToStr(data.value));          // Wert anzeigen lassen
  Until readed = 0;   // wiederholen bis keine Bytes mehr gelesen werden können
  CloseFile(f);       // Datei wieder schliessen
end;
 


Die Zeile
Code: Alles auswählen
 1 : (pre:Array[0..10] of Byte;              // Bytes die testweise übersprungen werden sollen

änderst Du nun z.b auf:
Code: Alles auswählen
 1 : (pre:Array[0..11] of Byte;              // so verschiebst Du es immer weiter,


und schaust Die wieder die Werte an, ob es sinnvoll wird.
ebenso kannst Du das mit Floats oder was auch immer probieren:
Code: Alles auswählen
 
Type TData = record
  case BYTE of
      0 : (all:array[0..BLOCKSIZE-1] of byte);    // der gesamte Datenblock
      1 : (pre:Array[0..10] of Byte;              // Bytes die testweise übersprungen werden sollen
           value : Real);                               // ein Float Wert, der evtl, hier liegen könnte
  end;
 

.....
Writeln(FloatToStr(data.value)); // Wert anzeigen lassen


nach und nach fängst Du an die Struktur zu füllen, z.B. so:
Code: Alles auswählen
Type TData = record
  case BYTE of
      0 : (all:array[0..BLOCKSIZE-1] of byte)// der gesamte Datenblock
      1 : (pre:Array[0..17] of Byte;            // Bytes die übersprungen werden sollen
           value : Integer;                     // hier steht vermutlich ein Integer
           unknown_1 : array[0..7] of Byte;     // hier sind noch unbekannte Daten 8 Bytes
           Summe : real;                        // hier liegt wohlk ein Realwert
           unknown_2 : array[0..4] of Byte);    // noch ungeklärte Bytes
 
  end;
 


Ist nur so eine Idee

Siro
Grüße von Siro
Bevor ich "C" ertragen muß, nehm ich lieber Lazarus...
siro
 
Beiträge: 315
Registriert: 23. Aug 2016, 13:25
Wohnort: Berlin
OS, Lazarus, FPC: Windows 7 Windows 8.1 Windows 10 | 
CPU-Target: 64Bit
Nach oben

Beitragvon lazagui » 2. Nov 2018, 23:49 Re: Binärdatei Felder vom Hexdump interpretieren

Hallo Siro,

erstmal vielen Dank für die Vorlage und schönen Gruß nach Berlin. Da habich 12 Jahre in der Warschauer gewohnt:-)
Ich werd wohl mal Lazaruns installieren und mich da durchtanken.

Gruß Mike
lazagui
 
Beiträge: 6
Registriert: 11. Feb 2015, 00:07

• Themenende •

Zurück zu Sonstiges



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron
porpoises-institution
accuracy-worried