이진 파일의 8 진 또는 16 진 덤프를 해석하는 방법은 무엇입니까?


14

이진 파일에는 문자열과 숫자가 있습니다. od -c filename또는 strings filename할 경우 문자열을 올바르게 볼 수 있습니다. 그러나 숫자는 어떻습니까? 그들은 이상한 형식입니다.

수행 한 후의 텍스트 od -c filename는 다음과 같습니다.

00000003636000032004 SD \ 0 \ 0 \ 0 \ 0 seq 1
0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0-002 3001
0000040 및 \ 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1
0000060-002 3 001 ÿ \ r \ 0 \ 0 \ t \ 0 \ 0 @ 3 ×
0000100233 º 004 \ 0 e 003 \ 0 \ 0 & \ 032 \ f O 2 7 \ 0
0000120 \ 0 \ 0 osfeu 1-002 3001 é 235
0000140 \ 0 \ 0 35003 \ 0 @ 3 × 233 º 004 \ 0 Ñ \ a \ 0 \ 0
0000160 ä \ 032 \ f O r E \ 0 \ 0 \ 0 osfap 1

이것을 해독하는 방법?

나는 심지어 시도했다 hexdump -C filename

출력은 다음과 같습니다.

00000000 1e 00 1a 04 53 44 00 00 00 00 73 65 71 31 20 20 | .... SD .... seq1 |
00000010 20 20 00 00 00 00 00 00 00 00 09 00 f3 02 33 01 | .......... ó.3. |
00000020 26 00 1a 0c 4f 32 06 00 00 00 6f 73 66 75 73 31 | & ... O2 .... osfus1 |
00000030 20 20 f3 02 33 01 ff 0d 00 00 09 00 00 40 33 d7 | ó.3.ÿ ...... @ 3 × |
00000040 9b ba 04 00 e9 03 00 00 26 00 1a 0c 4f 32 37 00 | .º..é ... & ... O27. |
00000050 00 00 6f 73 66 65 75 31 20 20 f3 02 33 01 e9 9d | ..osfeu1 ó.3.é. |
00000060 00 00 1d 03 00 40 33 d7 9b ba 04 00 d1 07 00 00 | ..... @ 3 × .º..Ñ ... |
00000070 e4 00 1a 0c 4f 72 45 00 00 00 6f 73 66 61 70 31 | ä ... OrE ... osfap1 |

명확히하기 위해 일반 파일 인 주 파일에는 표시되는 하나의 속성이 이상한 형식이 있으므로 원시 / 이진 파일을보고 있습니다.

일반 파일에서 8 진 덤프를 수행하면보기 문제가 해결되었습니다.

와 함께 grep 'id=123' regular_file | head -1 | od -c, 나는 거기에 어떤 숫자가 있는지 볼 수있었습니다. 나는 1을 기대하고 있었고, 그것은 001로 우리에게 보여주었습니다.


4
"해석"하려면 어떤 형식으로 저장되어 있는지 알아야합니다.
Kevin

나는 숫자가 이진 형식, 특히 이진 정수라고 들었습니다. 그게 내 질문에 도움이 되나요?

아니요, 컴퓨터의 모든 것은 이진이므로 파일의 레이아웃을 알아야합니다-각 숫자의 위치, 각 숫자의 의미. 이 파일은 어디서 구했습니까?
Kevin

명확히하기 위해, 나는 정상적인 파일도 가지고 있습니다. [seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [Date = 20120307] 일반 파일의 태그 중 하나에 ascii 값이 있습니다. 일반 파일은 일반적으로 로그를 읽는 데 사용되지만 올바른 값을 가지지 만 다른 형식으로이 이진 파일을보고 있습니다.

"표준"16 진 덤프의 오른쪽은 일반적으로 해당 데이터의 ASCII 표현입니다. 이 텍스트 not text를 ASCII보기에서 볼 수 있다고 해서 파일을 읽는 프로그램의 ASCII 는 아닙니다 . 예. 64 비트 리틀 엔디안 부호없는 정수로 인코딩 된 경우 숫자 7957706749327538292 입니다. ASCII보기에서 다음과 같이 보입니다 not text.
Peter.O

답변:


4

숫자를 저장하는 방법에는 여러 가지가 있습니다-ASCII ( ','를 사용하여 소수 부분 OR 또는 수천 그룹화로 로케일 특정 변형을 가질 수 있음), 이진 정수 (가변 비트 수) / float / double (모두 엔디안 아키텍처와 파일을 생성하는 소프트웨어가 표현을 공식화하는지 여부, BCD (비 압축, 압축, 고정 소수점 및 기타 변형), 2 차 코드화 10 진수에 따라 달라질 수 있습니다.

표준이 없습니다.


19

컴퓨터 과학을 위해 암기해야 할 첫 번째 사항 중 하나는 데이터 + 통역 = 유용한 정보 였습니다. 이에 대한 결론은 데이터 또는 해석이 누락 된 경우 아무것도 없다는 것입니다. 데이터 자체는 데이터를 해석하는 방법을 알려줄 수 없습니다. (당신은 당신이 알 메타 데이터를 가질 수 있지만, 당신은 해석하는 방법을 알아야 메타 데이터를 너무)

상황에서 나는 이것을 시도하는 것이 좋습니다.

file filename

다음과 같은 것이 나온다면 :

filename: data

당신이없는 절대적 형식이 무엇인지 모르고, 그것에서 무엇 프로그램의 사용이 무엇인지, 또는 내용에 대해 아무것도 filename, 당신은 아마 포기해야한다.

8 진 덤프 출력

od(8 진 덤프)는 하이브리드 텍스트 및 8 진 덤프를 생성합니다. 비 - 숫자와 같은 하나 가능한 문자가있는 o, s, f, 등 등, 또는 비 인쇄 문자 \0(ASCII 0 NUL) 또는 \a(ASCII 7 BEL표준 C 접두사베이스 8) 또는 숫자 0(예를 들면 032= 26 소수). 파일은 8 비트 바이트 스트림으로 해석됩니다 .

육각 덤프 출력

hexdump하나의 열은 16 비트로 8 비트 바이트를 나열하는 열과 함께 기존의 16 진 덤프를 생성하고, 다른 열은 해당 바이트가 해당하는 ASCII 문자를 표시합니다 (바이트 값이 인쇄 할 수없는 ASCII 문자이거나 ASCII 문자가 아닌 경우). , .) 그 위치에 도시되어있다. 다시 말하지만, 파일은 8 비트 바이트 스트림으로 해석됩니다 .

정수

파일이 100 % 이진 정수 (예를 들어 어떤 종류의 정수 표현의 헤더가없는 균일 한 1 차원 배열)로 구성되어 있으면 다음 질문에 모두 답해야합니다.

  • 그것들은 '적절한'바이너리 또는 이진 코드 십진수 (BCD) 입니까? (아마 이진)
  • 그것들은 비트 단위로 얼마나 넓습니까?
  • 너비가 8의 배수가 아닌 경우 SMS 메시지 또는 Base64와 같이 비트 압축되거나 바이트 정렬됩니까?
  • 너비가 8 비트 이상이면 바이트 순서는 무엇입니까? Big Endian, Little Endian 또는 다른 희귀종 중 하나입니까?
  • 정수 는 부호가 있거나 부호가 없습니까?
  • 서명 한 경우 2의 보수 (보다 가능성이 높음) 또는 1의 보수 또는 드물고 이상한 것으로 표시됩니까?

아마도 내가 지금 잊고있는 것이 더있을 것입니다.

그리고 이것은 일반적인 현대식 컴퓨터 아키텍처에서 나온 정수의 단일 차원의 균일 한 배열입니다. 데이터가 복잡해지면 너무 복잡 해져서 형식을 추측하는 것보다 복권 당첨이 더 쉬워집니다. 그리고 형식을 모른다면 추측 해야 합니다 (교육받은 추측이지만 추측).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.