Có cách nào để sao chép byte rỗng (ASCII 0x00) vào bảng tạm trên Windows không?


14

Null byte (ASCII 0x00) dường như không thể sao chép (có thể Ctrl + C) trên Windows. Để chứng minh điều này, hãy mở giao diện điều khiển dev của trình duyệt của bạn và làm console.log('a\x00b'). Nếu bạn thử và sao chép-dán chuỗi kết quả trên máy Windows 8 (và có thể cả các phiên bản Windows khác nữa), bạn sẽ thấy rằng chỉ có bản asao được sao chép. Và \x00tất cả mọi thứ sau khi nó bị bỏ qua.

Có cách nào để sao chép toàn bộ chuỗi chứa byte rỗng không? Bảng tạm có thể giữ byte rỗng không?

(Câu hỏi phụ trợ: tại sao các byte null không thể được sao chép? Ví dụ: có lý do liên quan đến bảo mật cho việc này không, hay đó chỉ là Windows ngớ ngẩn?)


câu hỏi hay .. thật thú vị để xem nếu nó đưa nó vào clipboard xxd có thể tạo ra null hay không C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
barlop

bằng cách sử dụng unxutils gclip và pclip C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER> <- tôi không rõ liệu null có đi vào bảng tạm không .. hoặc liệu chúng có vào nhưng không dán ra.
barlop

2
Ở đâu đó trong chuỗi, một chương trình đang sử dụng các hàm / biểu diễn chuỗi kết thúc null (nghĩa là các hàm chuỗi C). Rất phổ biến. Sự hiểu biết ít ỏi của tôi về những điều như vậy là "có" có các vấn đề bảo mật tiềm ẩn khi nhúng null, chủ yếu là do khả năng xác định sai về độ dài chuỗi và tràn bộ đệm (??).
Yorik

Đó là một câu đố khó hiểu: Tôi đã sao chép nội dung của JPG vào bảng tạm và khi tôi đọc lại, nó đã bị cắt ở mức null đầu tiên, điều này cho thấy bảng tạm được dựa trên văn bản. Tuy nhiên, tôi có thể sàng lọc hoặc cắt và dán hình ảnh giữa các gói đồ họa mà không gặp vấn đề gì.
AFH

Tôi đoán nó phụ thuộc vào định dạng được sử dụng. Clipboard hỗ trợ các định dạng khác nhau. Nếu bạn sao chép văn bản, rất có thể các ký tự null không được hỗ trợ vì chúng được sử dụng làm dấu kết thúc chuỗi. Nếu bạn sử dụng định dạng clipboard nhị phân, thì bạn có thể sao chép và dán byte rỗng.
Alexey Ivanov

Câu trả lời:


10

Không, bạn không thể đặt văn bản với các ký tự null được nhúng vào bảng tạm. Hãy xem danh sách các định dạng clipboard của Windows tiêu chuẩn . Có một vài định dạng chứa những thứ thường được hiểu là văn bản:

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

Mỗi một trong số đó có câu này trong định nghĩa của nó:

Một ký tự null báo hiệu kết thúc dữ liệu.

Bây giờ, CF_UNICODETEXT giữ dữ liệu của nó dưới dạng UTF-16LE , do đó, nhiều khả năng nó sẽ có một số byte null , nhưng về cơ bản, các ký tự null (hai byte null liên tiếp) vẫn kết thúc chuỗi.

Chúng tôi chỉ có thể suy đoán về lý do tại sao các ký tự null không được phép trong văn bản clipboard, nhưng nhiều khả năng đó chỉ là do các hàm xử lý chuỗi được sử dụng phổ biến nhất trong Windows cho rằng ký tự null báo hiệu kết thúc. Cách duy nhất khác để biết nơi một chuỗi dừng sẽ là tiền tố với độ dài của chuỗi.

Bạn có thể giữ đồ họa trên bảng tạm mặc dù chúng có thể có byte rỗng vì chúng được truyền xung quanh theo các định dạng bảng tạm khác nhau (ví dụ CF_BITMAP), phải được các chương trình hiểu khác nhau.


Cảm ơn - câu trả lời tuyệt vời. Tôi chắc chắn đã học được một số thứ tốt về clipboard của Windows.
Senshin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.