본문 바로가기
다양한 TIP

Linux hex dump로 보여주는 명령어 xxd 무슨 값인지 확인하는 방법(눈에 안보이는 null 등 확인가능)

by 유기농프로그래밍 2022. 4. 18.
반응형

파일을 열어서 데이터를 확인할 일이 있죠?

하지만 눈에 보이는게 다가 아니라는건 실제 파일에 대해 문제가 생겼을 때 알게 됩니다. 눈에 보이기엔 평범한 데이터 같은데 왜 오류가 날까? 그건 바로 데이터 안에 사람 눈엔 보이지 않는 값이 있기 때문입니다.

 

사람 눈에 안보이는 값들??

파일을 열어서 보게 되면 깨진 글자들이 보일 때가 있죠? Ascii에 포함되지 않는 값들, 특수기호들 등등은 대부분 깨진문자들로 보일 수 있습니다. 또한 바이너리값들은 말할 나위없이 깨져보이겠지요.

cat이나 vi 같은 명령어로 파일을 읽어보면, 스페이스나 Null 같은 데이터는 아예 보여주지도 않습니다. 이게 스페이스를 한건지 개행을 한건지 어디까지 한건지는 또다른 툴들을 이용해야 알 수 있지요. 그럼 어떻게 확실하게 파악할 수 있을까요?

 

바로 xxd라는 명령어로 가능합니다.

 

xxd 명령어

xxd - make a hexdump or do the reverse.

man page에 나오는 설명입니다. xxd는 hexdump를 만들어주거나 hexdump를 복원해주는 역할을 합니다. 

 

아래와 같은 샘플코드를 만들었습니다.

(vi 에서 NULL을 입력하는건 Ctrl + v + 000 입니다)

cat 명령어로 출력하면 전혀 어떤 값인지 알 수가 없지요.

이제 명령어 xxd를 사용해보겠습니다.

 

왼쪽엔 hex값이, 오른쪽엔 ascii로 표현됩니다. ascii로 표현되지 않는 값은 .으로 표시되지요. wireshark 같은 곳에서 packet을 읽을  때 .으로 된 값이면 hex로 확인해야하는 이유입니다.

 

xxd 명령어 사용방법

xxd [파일이름]

기본적으로 16진수로 표현이 됩니다.

 

옵션

옵션을 추가하면 bit로도 표현이 가능합니다. 

 

-b | -bits 옵션

Switch to bits (binary digits) dump, rather than hexdump.  This option writes octets as eight digits "1"s and "0"s instead of a normal hexadecimal dump. Each line is preceded by a line number in hexadecimal  and  followed by an ascii (or ebcdic) representation. The command line switches -r, -p, -i do not work with this mode.

16진 덤프가 아닌 비트(2진수) 덤프로 전환합니다. 이 옵션은 일반 16진수 덤프 대신 8자리 "1" 및 "0"으로 옥텟을 기록합니다. 각 행 앞에는 16진수의 행 번호가 있고 그 뒤에는 ASCII(또는 ebcdic) 표시가 있습니다. 명령줄 스위치 -r, -p, -i는 이 모드에서 작동하지 않습니다.

-c cols | -cols cols
format <cols> octets per line. Default 16 (-i: 12, -ps: 30, -b: 6). Max 256.

한 줄에 <cols>를 지정합니다. 기본값 16(-i: 12, -ps: 30, -b: 6). 최대 256개.

-E | -EBCDIC
Change the character encoding in the righthand column from ASCII to EBCDIC.  This does not change the hexadecimal representation. The option is meaningless in combinations with -r, -p or -i.

오른쪽 열의 문자 인코딩을 ASCII에서 EBCDIC로 변경합니다. 그러나 16진수 표현은 변경되지 않습니다. 이 옵션은 -r, -p 또는 -i와 함께 사용하면 의미가 없습니다.

-r | -revert
reverse  operation: convert (or patch) hexdump into binary.  If not writing to stdout, xxd writes into its output file without truncating it. Use the combination -r -p to read plain hexadecimal dumps without line number information and without a particular column layout. Additional Whitespace and line-breaks are allowed anywhere.

역연산: 16진수 덤프를 2진수로 변환(또는 패치)합니다. stdout에 쓰지 않으면 xxd는 출력 파일을 잘라내지 않고 출력 파일에 씁니다. 라인 번호가 없는 일반 16진 덤프를 읽으려면 -r -p 조합을 사용합니다.
특정 열 레이아웃 없이 정보를 표시합니다. 추가 공백 및 줄 바꿈은 어디서나 허용됩니다.

-u

use upper case hex letters. Default is lower case.

대문자 16진수 문자를 사용합니다. 기본값은 소문자입니다.

 

반응형

댓글