Nullbytes in hexadezimaler Schreibweise

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Nullbytes in hexadezimaler Schreibweise

    Um verschiedene Informationen aus Binärdaten zu extrahieren möchte ich einen String an der Stelle von Nullbytes spliten, bzw. diese ersetzen. Das funktioniert mit chr ( 0 ) gut, bei drei Nullbytes hintereinander ist das nicht mehr so schön:
    PHP-Code:
    $contents explode chr ) . chr ) . chr ), $content ); 
    Theoretisch müsste das doch auch hexadezimal (0x00) gehen oder? Problem ist nur, 0x00 ist erstmal dezimal (mit automatischem Typecasting auch == chr ( 0 )), wenn man 0x00 aber manuell auf (string) castet um damit ersetzten zu können ist das ganze nicht mehr gleich mit chr ( 0 ).
    PHP-Code:
    chr ) === (string)0x00 // false 
    Laut ASCII Tabelle sollte das aber passen. Gibt es noch andere Möglichkeiten mit Nullbytes in Strings arbeiten bzw. kann irgendjemand erklären wo hier die Unterschiede liegen?
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

  • #2
    ... wenn man 0x00 aber manuell auf (string) castet um damit ersetzten zu können ist das ganze nicht mehr gleich mit chr ( 0 ).
    richtig, (string)0x00 ist ein string, bestehend aus der ziffer null, genau wie (string)0x01 eine eins ist.

    bleibe einfach bei chr(0).

    Kommentar


    • #3
      wenn es wirklich ein binärer string ist, würde ich den erstmal nach hex konvertieren: bin2hex() und danach den string manipulieren.

      Kommentar


      • #4
        nachschlag, bezüglich meiner frage: http://www.php-resource.de/forum/sho...ighlight=mysql

        ich mache zuerst ein socket auf, dort kann man ein connection timeout angeben.

        dann lese ich $stream vom socket, dort kann man ein stream-timeout angeben.

        zuguterletzt parse ich die binäre antwort vom mysql-server, lt. MySQL Protocol network protocol version 10:
        PHP-Code:
        // Check MySQL server greeting (MySQL network protocol version 10)
        $hex=bin2hex($stream);
        $protocol=substr($hex82); // 5th byte is the protocol version (0a -> 10)
        $body_length=hexdec(substr($hex02))*2// first byte is the body length
         
        if($protocol==='0a'&&$body_length===strlen($hex)-8// -8 -> (4 byte header)
         
        {
          
        // MySQL OK
         

        Kommentar


        • #5
          wenn es wirklich ein binärer string ist, würde ich den erstmal nach hex konvertieren: bin2hex() und danach den string manipulieren.
          Problem ist dann nur, dass ich nach hex2dec ( ) die einzelnen Zeichen mit ord ( ) wieder in Text umwandeln muss, die Daten sind ID3 Tags / Metainformationen aus mp3 / wma Dateien, d.h. nur zum Teil Binär.
          zuguterletzt parse ich die binäre antwort vom mysql-server, lt. MySQL Protocol network protocol version 10:
          OffTopic:
          Schreib doch gleich eine eigene Klasse zur Kommunikation ...
          Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

          Kommentar


          • #6
            Pack doch einfach dein Trennzeichen in eine Variable. Dann ist es für die Entwicklung egal, wie du dir dein Nullbyte erzeugst und kannst mit den Stringfunktionen arbeiten!

            Kommentar


            • #7
              ... die Daten sind ID3 Tags / Metainformationen aus mp3 / wma Dateien, d.h. nur zum Teil Binär.
              was ist an buchstaben und ziffern nicht binär?

              Kommentar


              • #8
                was ist an buchstaben und ziffern nicht binär?
                Nichts, deswegen auch kursiv, Ascii trift es vielleicht besser, es ging mehr um darstellbare Zeichen.
                Pack doch einfach dein Trennzeichen in eine Variable.
                Ob $null oder chr ( 0 ) ist dann auch egal.
                Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                Kommentar


                • #9
                  Original geschrieben von tontechniker
                  Schreib doch gleich eine eigene Klasse zur Kommunikation ...
                  OffTopic:
                  naja, der rest funktioniert ja einigermaßen, aber mysql_connect() ist ja wohl diesbezüglich stümperhaft implementiert, oder nicht?
                  Zuletzt geändert von 3DMax; 22.08.2007, 02:01.

                  Kommentar


                  • #10
                    naja, der rest funktioniert ja einigermaßen, aber mysql_connect() ist ja wohl diesbezüglich stümperhaft implementiert, oder nicht?
                    OffTopic:
                    Stimmt, gerade wenn man überlegt das man fehlende Dateien oder ähnliches recht einfach abfangen kann ...
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar

                    Lädt...
                    X