hexdump - 리눅스에서 파일 내용을 16진수(hex)값으로 출력하기 리눅스

hexdump를 이용하면 텍스트 또는 이진(binary) 파일의 내용을 16진수로 출력할 수 있다. 우선 아래의 예시를 보자.

# my_file.txt 내용 확인
cat my_file.txt
this is a test file...

# 16진수로 출력(hexdump) - 2바이트(16비트) 단위로 해석됨에 유의
hexdump my_file.txt
0000000 6874 7369 6920 2073 2061 6574 7473 6620
0000010 6c69 2e65 2e2e 000a                   
0000017

hexdump에 아무런 옵션을 지정하지 않을 경우, 출력 내용이 2바이트(16비트) 단위로 구성되어 있음에 유의하자. 인텔 x86, AMD64는 모두 리틀-엔디안(little-endian, 작은 자리수 바이트가 주소값이 낮음) 구조이므로 파일을 읽어서 0x74 다음에 0x68이 나왔을 때 hexdump는 먼저 나온 0x74가 작은 자리수 바이트(LSB)라고 판단하여 위치를 뒤집어 출력해 준 것으로 보인다(0x7468 -> 0x6874).
 
파일의 내용을 볼 때는 그냥 1바이트씩 순서대로 출력하는 것이 더 낫다. -C 옵션을 이용하면 1바이트 단위로 16진수와 ASCII값을 나란히 출력하게 할 수 있다. 우리가 통상 hex 에디터에서 파일을 열었을 때 보던 모습이다.

# 16진수로 출력(-C 옵션, hex + ASCII)
hexdump -C my_file.txt
00000000  74 68 69 73 20 69 73 20  61 20 74 65 73 74 20 66  |this is a test f|
00000010  69 6c 65 2e 2e 2e 0a                              |ile....|
00000017

출력 형식을 직접 지정할 수도 있다. -e 옵션을 이용한다. 아래의 예시를 보자.

# 1바이트 4개씩 묶어서 출력
hexdump -e '4/1 "%02X " "\n"' my_file.txt
74 68 69 73
20 69 73 20
61 20 74 65
73 74 20 66
69 6C 65 2E
2E 2E 0A

-e 옵션의 내용을 보자면 1바이트 단위로 4개씩 묶어서(4/1) 2자리 16진수와 공백("%02X ") 형식으로 출력한 후에 줄바꿈("\n")을 출력하라는 뜻이다.

아래의 예시처럼 묶음 단위를 지정하지 않을 수도 있다.

# 1바이트씩 출력
hexdump -e '/1 "%02X "' my_file.txt
74 68 69 73 20 69 73 20 61 20 74 65 73 74 20 66 69 6C 65 2E *
0A

위의 출력 내용을 보면 0x2E가 반복되는 부분을 줄여서 아스테리스크(*)로 보여주는데, 만약 반복되는 부분도 그대로 출력하려면 -v 옵션을 추가한다.

# 1바이트씩 출력, 반복되는 부분도 그대로 출력(-v 옵션 추가)
hexdump -v -e '/1 "%02X "' my_file.txt
74 68 69 73 20 69 73 20 61 20 74 65 73 74 20 66 69 6C 65 2E 2E 2E 0A

이것 말고도 더 다양한 기능을 제공하고 있는 듯하나, 개인적으로 위에 언급한 옵션 정도만 사용하고 있다.



핑백

  • 반달가면 : 리눅스에서 16진수(hex) 문자열을 바이너리 파일로 만들기 2016-07-05 23:37:08 #

    ... "0F 00 FE ..." 이런 식의 16진수 문자열을 바이너리 파일로 만드는 방법이다. 바이너리 파일을 16진수 문자열로 출력해 주는 hexdump의 반대 방향 작업인 셈이다. echo 명령의 -e 옵션을 이용해서 간단하게 작업할 수 있다. 16진수 문자열에 "\x"를 붙여주면 된다. 아래의 예시를 보자 ... more

  • 반달가면 : [bash: grep] 바이너리 파일에서 16진수(hex) 데이터 검색하기 2016-09-05 23:11:42 #

    ... grep 명령은 주로 텍스트 파일에서 문자열을 검색할 때 사용하지만, 바이너리 파일에서 통상 16진수로 표현되는 특정 데이터를 검색하는 것도 가능하다. 물론 hexdump를 이용해서 바이너리 파일을 16진수 텍스트로 변환한 후에 grep 명령을 조합하여 사용해도 되나, grep 명령만으로 더 간편하게 검색할 수 있는 방법이 있 ... more

덧글

  • 변재경 2019/10/27 17:22 # 삭제 답글

    감사합니다!
  • 반달가면 2019/10/28 09:54 #

    아 네. 도움 되었다니 다행입니다~
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

620300
3990
1845264

ad_widget_2