일반 바이너리 덤프를 생성하고 이를 원래 파일로 되돌릴 수 있는 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
( B
0x1 8비트 바이트(옥텟) 덤프 ; get 00000001
으로 교체 )b
10000000
취소:
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}
l
eft는 인수를 0에서 길이 8로 확장합니다.${(#)param}
$param
( 의 반대 ) 에 값이 저장된 문자를 출력합니다$(( ##x ))
.