Windows에서 null 바이트 (ASCII 0x00)를 클립 보드에 복사하는 방법이 있습니까?


14

널 바이트 (ASCII 0x00)는 Windows에서 복사 가능 (Ctrl + C 가능)으로 표시되지 않습니다. 이를 시연하려면 브라우저의 개발 콘솔을 열고을 (를) 수행하십시오 console.log('a\x00b'). Windows 8 컴퓨터 (및 아마도 다른 버전의 Windows)에서도 결과 문자열을 복사하여 붙여 넣기하면 a가져 오기만 복사됩니다. \x00그 후 모든 것이 무시됩니다.

null 바이트를 포함하는 문자열 전체를 복사 할 수있는 방법이 있습니까? 클립 보드가 널 바이트를 보유 할 수 있습니까?

(보조 질문 : null 바이트를 복사 할 수없는 이유 는 무엇입니까? 예를 들어 보안 관련 이유가 있습니까? 아니면 Windows가 바보입니까?)


좋은 질문 .. 클립 보드에 C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
넣었는지 xxd가

unxutils gclip 및 pclip C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER> <을 사용 하면 null이 클립 보드에 들어가는 지 여부 또는 붙여 넣지 않았는지 여부가 명확하지 않습니다.
barlop

2
체인 어딘가에서 프로그램은 널 종료 문자열 함수 / 표현 (예 : C 문자열 함수)을 사용하고 있습니다. 매우 일반적인. 이러한 것들에 대한 나의 빈약 한 이해는 "예"이며, 문자열 길이와 버퍼 오버플로 (??)의 잘못된 식별 가능성으로 인해 null을 포함하는 데 잠재적 인 보안 문제가 있습니다.
Yorik

퍼즐 게임입니다 .JPG의 내용을 클립 보드에 복사했으며 다시 읽을 때 첫 번째 null에서 잘렸으므로 클립 보드가 텍스트 기반임을 나타냅니다. 그러나 그래픽 패키지간에 이미지를 스크린 덤프하거나 잘라내어 붙여 넣을 수 있습니다.
AFH

사용 된 형식에 따라 다릅니다. 클립 보드는 다른 형식을 지원합니다. 텍스트를 복사하면 문자열 종결 자로 사용되므로 null 문자가 지원되지 않을 가능성이 높습니다. 이진 클립 보드 형식을 사용하는 경우 null 바이트를 복사하여 붙여 넣을 수 있습니다.
Alexey Ivanov

답변:


10

아니요, 널 문자가 포함 된 텍스트는 클립 보드에 넣을 수 없습니다. 표준 Windows 클립 보드 형식 목록을 살펴 보겠습니다 . 일반적으로 텍스트로 이해되는 것을 유지하는 몇 가지 형식이 있습니다.

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

그중 하나는 그 정의에 다음과 같은 문장이 있습니다.

널 문자는 데이터의 끝을 나타냅니다.

이제 CF_UNICODETEXT 데이터를 UTF-16LE로 유지 하므로 null 바이트 가있을 가능성이 높지만 null 문자 (기본적으로 두 개의 null 바이트 행)는 여전히 문자열을 종료합니다.

클립 보드 텍스트에서 널 문자가 허용되지 않는 이유에 대해서만 추측 할 수 있지만 Windows에서 가장 일반적으로 사용되는 문자열 처리 기능이 널 문자가 끝을 나타내는 것으로 가정하기 때문일 가능성이 높습니다. 문자열이 어디에서 멈추는 지 알 수있는 유일한 방법은 길이 앞에 문자열을 붙이는 것입니다.

CF_BITMAP프로그램이 다르게 이해해야하는 다른 클립 보드 형식 (예 :)으로 전달되기 때문에 널 바이트가있을 가능성이있는 클립 보드에 그래픽을 보유 할 수 있습니다 .


고마워-좋은 대답. Windows 클립 보드에 대해 좋은 점을 확실히 배웠습니다.
senshin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.