파일의 순수 바이너리 덤프를 생성하거나 그 반대로 생성할 수 있는 Linux 유틸리티가 있습니까?

파일의 순수 바이너리 덤프를 생성하거나 그 반대로 생성할 수 있는 Linux 유틸리티가 있습니까?

일반 바이너리 덤프를 생성하고 이를 원래 파일로 되돌릴 수 있는 Linux 유틸리티나 절차가 있는지 궁금합니다( 매개변수를 xxd통해 -r이 작업을 수행 할 수 있기 때문입니다). 시도해 보았는데 xxd원본 파일로 되돌릴 수 있는 옵션이 있지만 일반 16진수 덤프만 인쇄합니다.

위의 방법이 불가능할 경우 순수 16진수 문자열(예: )을 hx829jdxkdiei순수 이진 문자열로 변환할 수 있는 유틸리티가 있습니까? Windows에는 010 Editor와 같은 일부 프로그램이 있지만 명령줄 Linux용 프로그램은 찾을 수 없습니다.

답변1

16진수로 덤프하고 싶다면 , hexdump또는 을 사용합니다 xxd.

그런데 16진수인 010 Editor를 언급하셨는데요.편집하다. Linux에는 많은 16진수 편집기가 있습니다. 예를 들어Arch 위키의 이 섹션, 또는이 위키피디아 페이지.

답변2

언제든지 다음을 사용할 수 있습니다 perl.

perl -ple 'BEGIN{$/=\8} $_=unpack("B*")' < file > file.dump

( B0x1 8비트 바이트(옥텟) 덤프 ; get 00000001으로 교체 )b10000000

취소:

perl -pe '$_=pack("B*", $_)' < file.dump > file

예:

$ printf %s hx829jdxkdiei | perl -ple 'BEGIN{$/=\8}$_=unpack("B*")'
0110100001111000001110000011001000111001011010100110010001111000
0110101101100100011010010110010101101001
$ printf %s hx829jdxkdiei | perl -ple 'BEGIN{$/=\8}$_=unpack("B*")' |
    perl -pe '$_=pack("B*", $_)'
hx829jdxkdiei

16진수 덤프에서 바이너리 덤프로의 경우:

$ echo ff0aa0ff | perl -ple '$_=unpack("B*", pack("H*",$_))'
11111111000010101010000011111111
$ printf %s hx829jdxkdiei | xxd -p -c8 | perl -ple '$_=unpack("B*", pack("H*",$_))'
0110100001111000001110000011001000111001011010100110010001111000
0110101101100100011010010110010101101001

에 대해서는 zsh다음도 참조하세요.

$ string=hx829jdxkdiei
$ set +o multibyte -o extendedglob
$ bin=${string//(#m)?/${(l[8][0])$(( [##2] ##$MATCH ))}}
$ print -r -- $bin
01101000011110000011100000110010001110010110101001100100011110000110101101100100011010010110010101101001
$ print ${bin//(#m)?(#c8)/${(#):-"2#$MATCH"}}
hx829jdxkdiei

어디

  • $(( ##x ))값을 문자 단위로 제공합니다 x( wchar_t이 옵션이 켜져 있으면 값 multibyte, 그렇지 않으면 바이트 단위로 값).
  • $(( [##2] expression ))산술 표현식의 결과를 이진수(접두사 없이 2#)로 확장합니다.
  • ${(l[8][0])param} left는 인수를 0에서 길이 8로 확장합니다.
  • ${(#)param}$param( 의 반대 ) 에 값이 저장된 문자를 출력합니다 $(( ##x )).

관련 정보