hexdump와 xxd 형식의 차이점

hexdump와 xxd 형식의 차이점

역방향 hexdump를 수행하는 방법을 검색하던 중 xxd가 언급된 것을 발견했습니다. 그러나 단순히 다음과 같이 작동하지 않는 것 같습니다.

xxd -r hexdumpfile > binaryfile

xxd infile그런 다음 과 의 출력 간의 차이를 비교하여 hexdump infile세 가지 차이점을 발견했습니다.

  1. xxd 출력에는 주소 뒤에 콜론이 있습니다.
  2. xxd 출력은 반전된 데이터 위치를 갖습니다(예를 들어, 5a42hexdump 출력은 425axxd 출력이 됩니다).
  3. 각 줄 뒤에는 추가 문자가 있습니다.

서버에는 특정 파일의 16진수 버전만 있습니다. xxd를 사용하여 바이너리 데이터를 올바르게 되돌리려면 어떻게 해야 합니까?

답변1

내가 아는 한 변환을 수행하는 명령은 없지만 몇 단계로 쉽게 나눌 수 있습니다.

  1. hexdump다음을 사용하여 출력 에서 ​​주소를 제거합니다.sed
  2. 다음을 사용하여 바이너리로 변환xxd
  3. 5a42다음을 425a사용한 엔디안 변환(예: )dd

전체 명령은 다음과 같습니다.

sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile

답변2

이 답변은 다음의 교차 게시물입니다.https://stackoverflow.com/a/52834021/6770384

하나의 명령으로 변환을 수행할 수 있습니다 sed. :주소 뒤에 를 추가하고 엔디안을 변경하면 충분합니다 ( ab12로 전환 12ab).

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r

알려진 버그(댓글 섹션 참조)

  • 원본 파일의 길이가 홀수인 경우(예: 1, 3, 5, 7, ..., 바이트 길이) 후행 널 바이트가 추가됩니다.
  • 원본 파일의 반복 섹션 을 hexdump*

답변3

.-p

xxd -r -p hexdumpfile > binaryfile

답변4

아래 사항을 간단히 사용할 수 있습니다.

  1. 필요한 형식으로 hexdump 가져오기

    hexdump -Cv <binary_file.bin> > 바이너리_파일.txt

-C는 데이터를 바이트 단위로 인쇄합니다.

-v는 반복되는 내용에 *를 사용하지 않습니다.

  1. 이제 각 줄의 bin_file.txt에서 처음과 마지막 몇 개의 문자를 제거해야 합니다. 여기서 sed 명령을 사용할 수 있습니다.

  2. 이제 xxd 명령을 사용하십시오

    xxd -r -p 바이너리_파일.txt > 복구_바이너리_파일.bin

  3. 두 파일의 md5sum을 확인할 수 있습니다. 일치해야합니다

    md5sum 바이너리_파일.bin

    md5sum Recover_binary_file.bin

관련 정보