AGB  ·  Datenschutz  ·  Impressum  







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

Hexdatei auswerten

Ein Thema von firefighter · begonnen am 7. Sep 2004
Antwort Antwort
firefighter

Registriert seit: 8. Jan 2004
10 Beiträge
 
#1

Hexdatei auswerten

  Alt 7. Sep 2004, 12:39
Hallo Community,

ich habe ein kleines Problemchen. Ich versuche mir etwas Arbeitsersparnis zu verschaffen und ein fax-log auszuwerten.

Beispiel Dateiausschnitt:

Code:
Offset     0  1  2  3  4  5  6  7   8  9  A B C D E F

00000520   36 56 3C 41 00 00 00 00  01 00 00 34 00 00 00 00   6V<A.......4....
00000530   00 00 00 00 40 38 02 03  00 00 00 30 00 00 00 00   ....@8.....0....
00000540   00 00 00 00 00 00 00 01  00 00 00 00 00 00 00 00   ................
00000550   00 00 00 00 00 00 00 00  00 00 00 26 3E 01 00 00   ...........&>...
00000560   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
00000570   00 00 00 00 00 00 00 00  00 01 00 01 30 31 32 33   ............0123
00000580   34 35 36 37 38 00 00 00  00 03 5C 5C 44 45 52 2D  45678.....\\DER-
00000590   53 45 52 56 45 52 5C 54  45 53 54 53 5C 61 72 63   SERVER\TESTS\arc
000005A0   68 69 76 65 5C 75 73 65  72 5C 31 32 33 34 35 36   hive\user\123456
000005B0   37 38 5C 6F 75 74 5C 45  33 37 33 42 45 35 46 00   78\out\E373BE5F.
000005C0   02 2B 34 39 20 31 32 33  34 20 35 36 37 38 39 30   .+49 1234 567890
000005D0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000005E0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
Dabei stellt die "4" am Offset 00000520 ein flag dar, dass für erfolgreich ausgeführt steht. Falls dies der Fall ist, steht wenig später die Telefonnummer (hier +49 1234 567890) - sonst nicht! Ich versuche also diese Datei zu öffnen und die flags zu analysieren. Gleichzeitig muss ich aber bei einem "erfolgreich" (d.h. flag=4) die telefonnummer herauslösen. Irgendwie bekomm ich das aber nicht hin (bin auch nur Delphianfänger!).

Hier mal mein einfacher Code..
- ich suche den code für die "4" -> hex 00 00 34 und merke mir den offset für später (gespeichert wird alles in einem array)
- ich gehe zum offset und suche ab da die nächste telefonnummer, welche immer mit "+", also hex 2B starten sollte. nun müsste ich die nächste nummer irgendwie herauslösen - nur wie??

Delphi-Quellcode:
Procedure TForm1.btn_check_fileClick(Sender: TObject);
Var
  FS: TFileStream;
  Filename: string;
  i,j, offset: Integer;
  Result: Array of byte;
  fax: Array[0..65000] of string; //maximal 65000 faxe
Begin

 j:=0; // Zähler für fax-array
 For I := 0 to 65000 do fax[i]:='0';

 if OpenDialog1.Execute then
 begin
   Filename := OpenDialog1.FileName;
  end;

 if Filename='then exit;
 FS := TFileStream.Create(Filename, fmOpenRead or fmShareDenyWrite);

 try
   SetLength(Result, FS.Size);
   lbl_filesize.Caption := 'Dateigröße: '+inttostr(FS.Size)+' Bytes';
   FS.Read(Result[0], Length(Result));

   /////////////////////// Durchsuchen nach Faxen //////////////////
   // Fax gesendet
   // Bytefolge suchen nach #000034 -> 4
   For I := 0 to FS.Size - 3 do
    If (Result[I] = $00) and
     (Result[I + 1] = $00) and
      (Result[I + 2] = $34) Then
     Begin
      fax[j]:='1|'+inttostr(I);
      j:=j+1;
      debug_faxe.Lines.Add('Fax'+Inttostr(j)+' erfolgreich versandt ('+inttostr(I)+')');
     End;

   //////////// Zugehörige Telefonnummern heraussuchen //////////////////
   For I := 0 to 65000 do
   begin
    // Falls ein | vorkommt und das davor eine 1 ist....
    if pos('|', fax[i])<>0 then
     if Copy(fax[i],0,pos('|', fax[i])-1)='1then
     begin
      //offset - wo er anfangen soll zu suchen
      offset:=strtoint(Copy(fax[i],pos('|', fax[i])+1,length(fax[i])));
      debug_faxe.Lines.Add('Offset:'+Inttostr(offset));

      // Bytefolge suchen nach #2B -> +
      For j := offset to FS.Size - 10 do
      begin
       if (Result[j] = $2B) Then
          Begin
           debug_faxe.Lines.Add('Telefonnummer:'+inttostr(Result[j+1]);
            // keine Ahnung wie weiter.....
          End;
      end;
     end;
 end;

  finally
   FS.Free;
 end;

end;
Könnte mir einer von Euch helfen?
  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 18:48 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