OD-V

OD-V

1GB의 큰 파일을 777개의 이벤트가 포함된 파일로 분할할 때 바이너리 데이터를 16진수/옥타브/어떤 적절한 형식으로 변환한 다음 다시 바이너리로 변환해야 합니다. 각 파일의 크기는 서로 다르므로 각 이벤트는 fafafafa문자열로 구분됩니다. hexdump 형식으로(그러나 이 구분 기호는 텔넷 예제에 없을 수 있으므로 연습을 위해 임의의 문자열을 선택할 수 있습니다). 이 답변에서 영감을 받아 어떤 명령이 이에 적합한지 이해하려고 노력하고 있습니다.여기.

아래 데이터 소스는 텔넷 바이너리이며 단지 예시일 뿐입니다. 나는 출력에 대해 설명할 때 헤더와 해당 부분에 대한 전체 문서를 가지고 있기보다는 의도적으로 의사 수준을 사용합니다. 그러나 이 작업에서는 이해가 필요하지 않습니다.

OD-V

od -v /usr/bin/telnet | head
0000000 042577 043114 000402 000001 000000 000000 000000 000000
0000020 000003 000076 000001 000000 054700 000000 000000 000000
0000040 000100 000000 000000 000000 073210 000001 000000 000000
0000060 000000 000000 000100 000070 000010 000100 000034 000033
0000100 000006 000000 000005 000000 000100 000000 000000 000000
0000120 000100 000000 000000 000000 000100 000000 000000 000000
0000140 000700 000000 000000 000000 000700 000000 000000 000000
0000160 000010 000000 000000 000000 000003 000000 000004 000000
0000200 001000 000000 000000 000000 001000 000000 000000 000000
0000220 001000 000000 000000 000000 000034 000000 000000 000000

논평

  • 첫 번째 문자열은 헤더여야 하는데 이상하게도 2, 4, 6, 10, ...이므로 나중에 제한이 될 수 있을 것 같습니다.

16진수 덤프 -v

hexdump -v /usr/bin/telnet | head
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0003 003e 0001 0000 59c0 0000 0000 0000
0000020 0040 0000 0000 0000 7688 0001 0000 0000
0000030 0000 0000 0040 0038 0008 0040 001c 001b
0000040 0006 0000 0005 0000 0040 0000 0000 0000
0000050 0040 0000 0000 0000 0040 0000 0000 0000
0000060 01c0 0000 0000 0000 01c0 0000 0000 0000
0000070 0008 0000 0000 0000 0003 0000 0004 0000
0000080 0200 0000 0000 0000 0200 0000 0000 0000
0000090 0200 0000 0000 0000 001c 0000 0000 0000

논평

  • 첫 번째 문자열의 번호가 결정됩니다
  • so 사이의 일부 문자는 나중에 가독성 문제가 될 수 있습니다.
  • 첫 번째 문자열의 크기는 다음 4글자 조합의 크기와 다릅니다.

16진수 덤프-vb

hexdump -vb /usr/bin/telnet | head
0000000 177 105 114 106 002 001 001 000 000 000 000 000 000 000 000 000
0000010 003 000 076 000 001 000 000 000 300 131 000 000 000 000 000 000
0000020 100 000 000 000 000 000 000 000 210 166 001 000 000 000 000 000
0000030 000 000 000 000 100 000 070 000 010 000 100 000 034 000 033 000
0000040 006 000 000 000 005 000 000 000 100 000 000 000 000 000 000 000
0000050 100 000 000 000 000 000 000 000 100 000 000 000 000 000 000 000
0000060 300 001 000 000 000 000 000 000 300 001 000 000 000 000 000 000
0000070 010 000 000 000 000 000 000 000 003 000 000 000 004 000 000 000
0000080 000 002 000 000 000 000 000 000 000 002 000 000 000 000 000 000
0000090 000 002 000 000 000 000 000 000 034 000 000 000 000 000 000 000

이 명령은 옥타브 형식이라고 가정하는 od -v6자리 문자열을 제공합니다 . 000000 042577또 다른 명령은 hexdump -v.와 같은 4개의 문자 문자열을 제공하지만 457f 464c일부 옥타브 옵션을 사용하면 . hexdump -vo와 같은 3개의 문자 단어가 제공됩니다 000000 177 105 ....

다음 중 분할을 쉽게 만드는 등 이진 데이터의 데이터 조작에 적합한 명령은 무엇입니까?

답변1

바이너리 테스트 데이터 1GB, 논의됨여기, 작성자:

dd if=/dev/urandom of=sample.bin bs=64M count=16

바이트 위치로 분할

이에 대한 주제를 참조하십시오여기. 바이트 오프셋이 고정된 경우 분할을 수행하는 가장 적절한 방법이라고 생각합니다. 처음 두 이벤트 헤더의 위치를 ​​결정하고 이벤트 크기를 계산해야 합니다. 또한 분할을 종료할 시기를 알 수 있도록 마지막 이벤트 헤더의 꼬리도 고려하세요.

xxd

대답은 FloHimself의 의견에 있습니다.

xxd -ps sample.bin | process | xxd -ps -r

OD-V

에서는 od -vStephenKitt의 의견에 따라 출력 형식을 다음과 같이 지정해야 합니다.

od -v -t x1 sample.bin

주다

0334260    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334300    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334320    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334340    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334360    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334400    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334420    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334440    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334460    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334500    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334520    00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
0334540

이것은 처리하기가 더 쉽습니다.

Hex/Octave 채널 대신 Ascii 채널을 통한 전달에 대한 설명

나는 바이너리에서 16진수로 변환하고 다시 바이너리로 변환하는 것만으로도 충분하다고 생각합니다 xxd -ps. 이렇게 했는데 base64 sample.bin | less -s -M +Gg아래와 같이 처리 및 출력이 상당히 느려지는 것을 확인했습니다.

CGGUAMA0GCSQGSIB3DQEBAQUBIBIIBIIBR2EFJ76bigPn+JZLGVK9G3ryRHIPKNIPGPRJMAB91ATT6GC0RS3XYBZM8NVCXMNR+2CHTO/OSH85EXUH4LK8MELHO Izleauur8efaxknz4SBZ6A8EWR0X/ZX 09BP6IMK18BDVUCT 15PT2FBLUVJFJ7HTWCDY0EWM+EU2Lijgkrik8aAARQJJK/CIHFGLQUT ResflgdogCPTZEWJUWX31/8mrven5hcpzhq+NMI1D6NYJZGHN08 //OBF3ZTHLCDVMOWB161I2LHQ0JY9A/TNYAM0J7ZSYFW0/VVMZYDT5KG1J1 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 아아아아아아아아아아아아아아아아아아아

관련 정보