Gibt es eine Möglichkeit, unter Windows Null-Bytes (ASCII 0x00) in die Zwischenablage zu kopieren?

14

Null-Bytes (ASCII 0x00) scheinen unter Windows nicht kopierbar zu sein (Strg + C-fähig). Öffnen Sie zur Demonstration die Entwicklungskonsole Ihres Browsers und tun Sie dies console.log('a\x00b'). Wenn Sie versuchen, die resultierende Zeichenfolge auf einem Windows 8-Computer (und wahrscheinlich auch auf anderen Windows-Versionen) zu kopieren und einzufügen, werden Sie feststellen, dass nur die aZeichenfolge kopiert wird. Das \x00und alles danach wird ignoriert.

Gibt es eine Möglichkeit, die Gesamtheit einer Zeichenfolge zu kopieren, die Null-Bytes enthält? Kann die Zwischenablage sogar Null-Bytes enthalten?

(Hilfsfrage: Warum können keine Null-Bytes kopiert werden? Gibt es beispielsweise einen sicherheitsrelevanten Grund dafür oder ist Windows nur albern?)

senshin
quelle
gute frage .. sei interessant zu sehen, ob es in die Zwischenablage gebracht wird xxd kann Nullen ausgeben C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
barlop
Verwenden von unxutils gclip und pclip C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER> <- mir ist nicht klar, ob die Nullen in die Zwischenablage verschoben werden oder ob sie eingegeben, aber nicht eingefügt werden.
Barlop
2
Irgendwo in der Kette verwendet ein Programm nullterminierte Zeichenfolgenfunktionen / -darstellungen (dh C-Zeichenfolgenfunktionen). Sehr gewöhnlich. Mein dürftiges Verständnis solcher Dinge ist "Ja". Es gibt potenzielle Sicherheitsprobleme beim Einbetten von Nullen, hauptsächlich aufgrund der Möglichkeit einer falschen Identifizierung der Zeichenfolgenlänge und des Pufferüberlaufs (??).
Yorik
Es ist ein Rätsel: Ich habe den Inhalt eines JPG in die Zwischenablage kopiert und beim Zurücklesen wurde er beim ersten Nullpunkt abgeschnitten, was darauf hindeutet, dass die Zwischenablage textbasiert ist. Trotzdem kann ich problemlos Bilder zwischen Grafikpaketen ausgeben oder Bilder ausschneiden und einfügen.
AFH
Ich denke, es hängt vom verwendeten Format ab. Die Zwischenablage unterstützt verschiedene Formate. Wenn Sie Text kopieren, werden diese höchstwahrscheinlich keine Nullzeichen unterstützt, da sie als Zeichenfolgenabschluss verwendet werden. Wenn Sie ein binäres Zwischenablageformat verwenden, können Sie Nullbytes kopieren und einfügen.
Alexey Ivanov

Antworten:

10

Nein, Sie können keinen Text mit eingebetteten Nullzeichen in die Zwischenablage einfügen. Schauen wir uns die Liste der Standardformate für die Windows-Zwischenablage an . Es gibt einige Formate, in denen Dinge allgemein als Text verstanden werden:

  • CF_TEXT (1)
  • CF_OEMTEXT (7)
  • CF_UNICODETEXT (13)

Jeder einzelne von ihnen hat diesen Satz in seiner Definition:

Ein Nullzeichen signalisiert das Ende der Daten.

Nun CF_UNICODETEXT hält seine Daten als UTF-16LE , so ist es mehr als wahrscheinlich einig null hat Bytes , aber Null - Zeichen (zwei Null - Bytes in einer Reihe, im Grunde) noch die Zeichenfolge beenden.

Wir können nur darüber spekulieren, warum Nullzeichen im Text der Zwischenablage nicht zulässig sind, aber höchstwahrscheinlich nur, weil die in Windows am häufigsten verwendeten Zeichenfolgenverarbeitungsfunktionen davon ausgehen, dass ein Nullzeichen das Ende signalisiert. Die einzige andere Möglichkeit zu wissen, wo eine Zeichenfolge stoppt, besteht darin, ihr ihre Länge voranzustellen.

Sie können Grafiken in der Zwischenablage speichern, obwohl sie wahrscheinlich Null-Bytes haben, da sie in verschiedenen Zwischenablageformaten (z. B. CF_BITMAP) weitergegeben werden, die von Programmen unterschiedlich verstanden werden müssen.

Ben N.
quelle
Danke - tolle Antwort. Ich habe definitiv ein paar gute Dinge über die Windows-Zwischenablage gelernt.
Senshin