Apakah ada cara untuk menyalin byte nol (ASCII 0x00) ke clipboard di Windows?

14

Null bytes (ASCII 0x00) tampaknya tidak dapat disalin (Ctrl + C-mampu) pada Windows. Untuk demonstrasi ini, buka konsol dev browser Anda dan lakukan console.log('a\x00b'). Jika Anda mencoba dan menyalin-tempel string yang dihasilkan pada mesin Windows 8 (dan mungkin juga versi Windows lainnya), Anda akan menemukan bahwa hanya asalinan yang disalin. The \x00dan semuanya setelah itu diabaikan.

Apakah ada cara untuk menyalin keseluruhan string yang berisi byte nol? Dapatkah clipboard bahkan menampung byte nol?

(Pertanyaan tambahan: mengapa byte tidak dapat disalin? Misalnya ada alasan terkait keamanan untuk ini, atau apakah hanya Windows yang konyol?)

senshin
sumber
pertanyaan yang bagus .. menarik untuk melihat apakah itu memasukkannya ke clipboard xxd dapat menghasilkan nulls C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
barlop
menggunakan unxutils gclip dan pclip C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER> <- tidak jelas bagi saya apakah nulls masuk ke clipboard .. atau apakah mereka masuk tetapi tidak menempel.
barlop
2
Di suatu tempat dalam rantai, sebuah program menggunakan fungsi string / representasi null diakhiri (yaitu fungsi string C). Sangat umum. Pemahaman saya yang sedikit tentang hal-hal seperti itu adalah "ya" ada masalah keamanan potensial dengan menanamkan nulls, sebagian besar karena potensi kesalahan identifikasi panjang string dan buffer overflow (??).
Yorik
Ini membingungkan: Saya menyalin isi JPG ke clipboard, dan ketika saya membacanya kembali itu terpotong di nol pertama, yang menunjukkan clipboard berbasis teks. Namun saya dapat menyaring dump atau memotong dan menempelkan gambar di antara paket grafik tanpa masalah.
AFH
Saya kira itu tergantung pada format yang digunakan. Clipboard mendukung berbagai format. Jika Anda menyalin teks, kemungkinan besar karakter-nolnya tidak didukung karena digunakan sebagai terminator string. Jika Anda menggunakan format clipboard biner, maka Anda dapat menyalin dan menempelkan byte nol.
Alexey Ivanov

Jawaban:

10

Tidak, Anda tidak dapat meletakkan teks dengan karakter nol yang tertanam di clipboard. Mari kita lihat daftar format clipboard Windows standar . Ada beberapa format yang menyimpan hal-hal yang secara umum dipahami sebagai teks:

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

Setiap orang memiliki kalimat ini dalam definisi:

Karakter nol menandakan akhir data.

Sekarang, CF_UNICODETEXT simpan datanya sebagai UTF-16LE , sehingga kemungkinan besar akan memiliki beberapa byte nol , tetapi karakter null (dua null byte berturut-turut, pada dasarnya) masih akan mengakhiri string.

Kami hanya dapat berspekulasi tentang mengapa karakter nol tidak diizinkan dalam teks clipboard, tetapi kemungkinan besar itu hanya karena fungsi pemrosesan string yang paling umum digunakan di Windows mengasumsikan karakter nol memberi sinyal akhir. Satu-satunya cara lain untuk mengetahui di mana string berhenti adalah dengan awalan panjangnya.

Anda dapat menahan grafik pada clipboard meskipun mereka kemungkinan memiliki byte nol karena mereka diedarkan dalam format clipboard yang berbeda (misalnya CF_BITMAP), yang harus dipahami secara berbeda oleh program.

Ben N
sumber
Terima kasih - jawaban yang bagus. Saya pasti belajar beberapa hal bagus tentang papan klip Windows.
senshin