Sebastian Becker: \x Syntax

Hallo,

was bedeutet denn eigentlich so eine Syntax in einer Zeichenkette ? ...

\x69\x66\x28\x21\x28\x64\x77\x5f  [Beispiel]

Danke für die Aufklärung, Grüße,

Sebastian Becker

  1. Hallo Sebastian,

    was bedeutet denn eigentlich so eine Syntax in einer Zeichenkette? ...
    \x69\x66\x28\x21\x28\x64\x77\x5f  [Beispiel]

    der Backslash in einem String ist ein sogenanntes Escape-Zeichen und bewirkt, dass dem (den) nachfolgenden Zeichen eine besondere Bedeutung zukommt.

    Beispiele:
      \n  Zeilenvorschub
      "  Anführungszeichen (würde ohne \ davor den String abschließen)
      \  Backslash (einzeln würde er ja als Escape-Zeichen wirken)

    Das \x bewirkt, dass man mit den nachfolgenden Hex-Ziffern das gewünschte Zeichen durch seinen numerischen Code angeben kann, also z.B. 0x41='A', 0x5A='Z', 0x24='$', usw.
    Dein Eingangsbeispiel steht also für den String "if(!(dw_".

    Schönen Sonntag noch,

    Martin

    1. Hallo, Martin,

      ach so - das ist also einfach nur Hexadezimalcode! Da hätte ich auch selber drauf kommen können! Danke! Das "\x" am Anfang hatte mich verwirrt ...

      Und auf welche Weise kann ich denn einen solchen String komplett in "normalen" Code zurückverwandeln?

      Danke, Grüße,

      Sebastian

      1. Hallo Sebastian,

        ach so - das ist also einfach nur Hexadezimalcode! Da hätte ich auch selber drauf kommen können! Danke! Das "\x" am Anfang hatte mich verwirrt ...

        Das 'x' ist doch die übliche Kennzeichnung für Hex-Zahlen.

        Und auf welche Weise kann ich denn einen solchen String komplett in "normalen" Code zurückverwandeln?

        Öhm... hab ich noch nicht drüber nachgedacht - ich lese das fließend.
        Aber wie wär's mit einem einfachen alert("\x26\x48\x52\x73\x35\x62\x51"); ?

        So long,

        Martin

        1. Hallo,

          Öhm... hab ich noch nicht drüber nachgedacht - ich lese das fließend.

          ist das jetzt dein Ernst?
          wie kommt man auf so eine Idee.. alle Hexcodes auswendig zu lernen?

          mfg
          Twilo

          1. Hi,

            Öhm... hab ich noch nicht drüber nachgedacht - ich lese das fließend.
            ist das jetzt dein Ernst?

            Äh, klar doch, wieso nicht?

            wie kommt man auf so eine Idee.. alle Hexcodes auswendig zu lernen?

            Hab ich nicht. Aber zumindest den ASCII-Zeichensatz kenne ich auswendig, das ergab sich im Lauf der Zeit ganz automatisch. Und Hex-Werte im Zahlenbereich 0x00..0xFF (also 8bit) kann ich auch simultan umwandeln. Ob ich nun 0xC4 oder 196 lese, macht für mich keinen Unterschied. Das geht soweit, dass ich beim Kopfrechnen oft die Werte zwischen Hex und Dezimal hin- und her umwandle, wenn sie im anderen Zahlensystem "handlicher" sind.

            So long,

            Martin

        2. Hallo, Martin,

          hab ich noch nicht drüber nachgedacht - ich lese das fließend.

          Wow - schon mal bei Thomas Gottschalk damit aufgetreten  ;-)  ...

          Aber wie wär's mit einem einfachen alert("\x26\x48\x52\x73\x35\x62\x51"); ?

          ach so, mit alert kann man sich den zugehörigen ASCII-Wert ohne vorherige Umwandlung ausgeben lassen?

          Trotzdem hätte ich gerne den Wert in einer Textarea oder so, zwecks "Reverse Engineering" ...

          Grüße,

          Sebastian

          1. Hallo,

            hab ich noch nicht drüber nachgedacht - ich lese das fließend.
            Wow - schon mal bei Thomas Gottschalk damit aufgetreten  ;-)  ...

            Nö, wieso? Das ist ein häufiges Programmierer-Syndrom.
            Wenn man mal ein paar Jahre Erfahrung in Assembler gemacht hat...

            Aber wie wär's mit einem einfachen alert("\x26\x48\x52\x73\x35\x62\x51"); ?
            ach so, mit alert kann man sich den zugehörigen ASCII-Wert ohne vorherige Umwandlung ausgeben lassen?

            Nein, es gibt keine Umwandlung. Selbst wenn du Zeichen in einem String in der \x-Notation eingibst, werden sie gleich bei der Interpretation dieser Programmzeile in Klartext umgewandelt. Das heißt, wenn ich schreibe
             var str = "\x48\x61\x6C\x6C\x6F";
            dann wird die Variable str von Anfang an den Wert "Hallo" haben.

            Trotzdem hätte ich gerne den Wert in einer Textarea oder so, zwecks "Reverse Engineering" ...

            Kannste machen. Du kannst solche Strings im Programmkontext genau so behandeln, als wären sie im Klartext eingegeben worden. Deshalb funktioniert auch das alert() ohne weitere Maßnahmen.

            Ciao,

            Martin