'copy / b'명령을 사용하면 정확히 어떻게됩니까?


13

오늘 방금 copy /b명령을 사용하여 특정 파일을 병합 할 수 있음을 발견했습니다 . 특히 두 개의 mp3 파일을 병합하면 VLC 플레이어가 타이밍과 함께 재미있는 동작을 나타냅니다.

             받아 1

여기는 꽤 정상적이지만 첫 번째 음악은 끝나고 ... 재미있는 부분은 ...

            2를 가지고 가십시오              3을 가지고 가십시오

여기서, 탐색 시간은 말 그대로 실행 중이었습니다.

이 기술과 함께 사진이나 PDF를 결합 할 때 파일 크기가 올바르게 증가하지만 첫 번째 사진 만 표시됨을 발견했습니다.

내 질문은 : copy /b명령이 정확히 무엇을 합니까? 실제로 파일을 병합하는 데 사용됩니까, 아니면 해킹입니까?

답변:


17

명령 의 /b플래그는 copy파일을 이진 (즉, 의미없는 바이트의 원시 스트림 /a)으로 취급하고 텍스트 행으로 처리 하는 기본 (또는 ) 동작 대신 바이트 단위로 파일을 복사합니다 ( 줄 끝 포함) 문자, 파일 끝 등)

기본 텍스트 동작이나 이진 스위치로 텍스트 파일을 병합 할 수 있지만 거의 모든 이진 파일이 작동하지 않습니다. 이진 파일에는 일반적으로 헤더 , 메타 데이터 , 데이터 구조 가 있기 때문에 단순히 두 개의 이진 파일에서 바이트를 복사하여 작동 할 것으로 예상 할 수 없습니다.등 파일의 형식을 정의합니다. 이진 복사를 수행하면 모든 바이트를 그대로 복사하게되므로 이러한 구조를 원래 위치에 두지 않아야합니다. 따라서 열면 구문 분석 기능에 문제가 발생하고 본질적으로 손상된 데이터가 무엇인지 알 수 있습니다 . 일부 프로그램은 이해가되지 않는 부분을 무시하고 단순히 그들이 할 수있는 것을 보여 주지만 (이를 통해 입체 사진이 작동 할 수 있음), 일부는 오류가 발생하여 파일이 손상되었다고 불평 할 것입니다. 손상을 감지하는 기능은 파일 유형에 따라 다릅니다.

예를 들어, 간단한 PDF 형식을 만들어 봅시다.

Byte(s)    Meaning
---------------------

File header:
0-1        # of Pages
2-3        Language
4-5        Font
6-EOF      Data (each page encoded separately)

Page data:
0-1        Page number
2-3        # of characters on page
4-#chars   Letters contained on the page

보시다시피, 각 파일에는 일반적인 정보가 포함 된 파일 수준 헤더와 페이지 데이터가 포함 된 각 페이지의 데이터 블록이 포함됩니다. 그런 다음 각각 하나의 페이지를 포함하는 두 개의 파일을 가져 와서 이진 파일로 병합하면 하나의 두 페이지 파일을 만들지 않고 한 페이지로 시작하는 하나의 손상된 파일을 만든 다음 여러 개의 정크 파일 (파일)이 생깁니다 프로그램이 2 페이지를 읽으려고하면 헤더가 의미가 없습니다.)

MP3에서도 마찬가지입니다. 이렇게 결합 하면 두 번째 파일의 시작 및 / 또는 끝에 ID3 태그 가 유지되고 플레이어가 다음 프레임을 읽으려고 할 때 오디오 데이터가 필요하지만 헤더를 찾는 중입니다. 오디오 데이터의 예상 형식과 일치하지 않는 두 번째 파일이므로 수행 할 작업을 모릅니다. 일부 플레이어는 헤더를 오디오 데이터 (정적 / 노이즈 / 팝 등으로 재생 될 수 있음)로 재생하고 일부는 다음 올바른 프레임까지 사운드를 차단하고 일부는 노래 재생을 완전히 중지하고 일부는 충돌 할 수도 있습니다. .

이 copy명령은 일반 텍스트 이외의 파일 형식 (아직 ASCII 텍스트 만 해당)에 대해서는 아무것도 모르므로 일반 텍스트 만 올바르게 결합 할 수 있습니다. 이진 파일은 내용을 올바르게 구문 분석하고 해석하는 방법을 알고있는 편집기를 사용하여 결합해야합니다.


VLC는 mp3 파일을 모두 재생하고 올바르게 검색하지만 문제는 시간 변화
— 만보고 싶지 않다는 것입니다

내가 말했듯이 일부 프로그램은 손상된 파일을 허용합니다. VLC의 파싱 알고리즘은 "손상된"프레임을 건너 뛸 수 있지만 실제 프레임이 아니기 때문에 올바른 길이를 알 수 없으므로 건너 뛸 수 있습니다. 위의 발명 된 2 페이지 PDF 파일을로드하는 것과 같습니다. 독자는 실제로 얼마나 많은 페이지가 있는지 모를 것입니다. MP3를 사용하는 가장 좋은 방법은 이진 복사를 수행하기 전에 오디오 프레임이 많지 않도록 태그를 제거하는 것입니다.
— Synetech

1

귀하의 예에서 MP3의 경우 MP3가 인코딩되는 방식으로 인해 이상한 동작이 발생합니다. 예를 들어 ID3v1 태그는 MP3의 마지막 128 바이트 (예 : 아티스트, 앨범 등)입니다. 이 정보는 "재생 가능"하지 않습니다. VLC 또는 다른 미디어 플레이어가 MP3를 열면 첫 번째 MP3를 통해 재생되고 정보에 대해 재미있게 행동 한 다음 나머지 파일을 통해 재생됩니다. 지금 Windows를로드하지 않았으므로 테스트 할 수 없습니다.

나는 이것이 이미지 나 영화와 같다고 가정 할 것이다. 파일이 인코딩되는 방식에 따라 파일이 "결합"되는 방식에 따라 다릅니다. 이 기능은 모든 것이 평범한 텍스트 일 ​​때 DOS 시절부터 온 것 같습니다.


1

오래 전에 좋은 Win ME 시절에는 비디오 클립을 연결하는 데 사용했습니다. 항상 작동하지는 않았지만 얼마 동안 작동했습니다.

이것은 내가 사용한 명령의 예입니다.

copy /b movie1.mpg + movie2.mpg + movie3.mpg movie4.mpg

너무 크지 않고 모두 같은 유형, 프레임 속도 등의 영화인 경우 일반적으로 완벽하게 병합됩니다. 최근에 이와 같은 것을 시도하지 않았습니다.


-1

MP3에 관해서는 대략 헤더 뒤의 내용을 모두 데이터로 읽을 수 있습니다. 이 게임은 Sega Genesis의 Sonic 3과 Sonic & Knuckles라는 또 다른 게임입니다. Sonic & Knuckles 정품 카트리지에는 다른 게임을 삽입 할 수있는 슬롯이 있었지만 Sonic 2와 특별히 3을 추가했을 때 체크섬이 다른 포인터 세트를 트리거 할 경우 게임이 다르게 작동합니다. ROM을 사용하는 초기 단계에서는 하드웨어에있는 것처럼 두 개의 카트리지를 작동시킬 때마다을 사용했습니다 copy /b sonick.bin+sonic3.bin sonic3k.bin. 이런 식으로 병합하면 sonick이 sonic3 리소스를 사용하도록 명령 세트 (포인터)를 갖는 하나의 큰 단일 ROM이 생성됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.