2013-05-05 4 views
1

저는 기본 명령 행 프로그램에서 2 진 데이터 덤프의 16 진 데이터를 분석합니다. 기본적으로 구조체의 정확한 내용 (실제로는 구조체의 큰 배열)을 텍스트 파일에 덤핑합니다.diff - 16 진수 덤프에서 두 값 사이의 특정 변경을 찾습니다.

그런 다음 두 번째 이진 덤프를 만들고 vim의 두 파일을 xxd을 사용하여 비교하여 원본 데이터의 이진 - 텍스트 표현을 만듭니다.

두 파일의 크기는 모두 바이트로 동일하며이 둘을 의미있는 방식으로 비교하려고합니다. 파일을 덤프하기 전에 데이터를 조금만 변경해도 해시가 포함 된 다른 섹션, 변경된 값을 기반으로 한 함수 등으로 인해 파일의 다른 부분이 크게 변경됩니다. 값이 1로 설정하고, 초 :

은 가능 diff 또는 vimdiff 말을 말해 두 파일을 비교하고, 원본 파일 (파일 1 예)이 파일의 부분 만 나를 보여주는 것입니다 파일의 값이 32?

감사합니다.

답변

6

내가 사용

diff <(xxd file1.bin) <(xxd file2.bin) 

이 두 xxd 프로세스의 출력을 비교하는 process substitution를 사용합니다. 이것은 여전히 ​​행의 차이를 보여주기 때문에 한 행에있는 어떤 바이트가 다른 경우에는 나열됩니다. 이것은 좋은 hexdump 보이는 비교를 제공합니다.

그러나 고전적인 도구는 cmp입니다.

그래서,이과 같이 처리 할 수있다 :

cmp -l file1.raw file2.raw | grep -in "oldValue" | grep -in "newValue" 

이것은 당신이 인쇄 다음 필드가 필요 정확히 나열됩니다 :의 텍스트 모드 비교를 제공

OFFSET VALUE_IN_FILE_1 VALUE_IN_FILE_2 
+0

이미'vim '에서 생성하고있는 두 바이너리 - 텍스트 파일의 출력. 이것은 하나의 필드가 'x'값에서 시작하고 두 번째 파일에서 'y'값을 가질 것이라는 점을 감안할 때 필드 별 비교의 문제를 어떻게 해결합니까? – DevNull

+2

당신은'cmp'을 보았습니까? –

+1

나는이 문제를 이해하지 못한다. 'cmp -l'은 "바이트 수 (10 진수)와 각 바이트마다 다른 바이트 값 (8 진수)을 출력합니다." 알려진 값에 대한 목록을 통해'grep '만하면 십진법 오프셋을 얻을 수 있습니다. –