육각 덤프를 사람이 읽을 수있는 형태로 변환하기위한 일반적인 유틸리티 또는 라이브러리가 있습니까?

StackOverflow https://stackoverflow.com/questions/191652

문제

나는 다양한 장치와 직렬 통신으로 많은 작업을 수행하므로 종종 로그 파일에서 육각 덤프를 분석해야합니다. 현재 덤프를보고 프로토콜 사양을보고 결과를 기록하여 수동으로 수행합니다. 그러나 이것은 지루하고 오류가 발생하기 쉽습니다. 특히 WHEM 메시지에는 수백 개의 바이트가 포함되어 있으며 Big-Endian 및 Little-Endian 데이터, ASCII, 유니 코드, 압축, CRC, 혼합물이 포함되어 있습니다. . . .

더 일반적인 사례를 지원하기 위해 몇 가지 파이썬 스크립트를 작성했습니다. 그러나 다루어야 할 프로토콜이 많이 있으며 분석 할 덤프가 많이 없다는 것을 알지 않는 한 사용자 정의 스크립트를 작성하는 데 시간을 보내는 것은 의미가 없습니다.

내가 원하는 것은이 활동을 자동화 할 수있는 일종의 유틸리티입니다. 예를 들어, 다음과 같은 텍스트 육각 덤프가있는 경우 다음과 같습니다.

7e ff 00 7b  00 13 86 04
00 41 42 43  44 56 ef 7e

그리고 다음과 같은 메시지 형식에 대한 일종의 설명은 다음과 같습니다.

# Field         Size        Byte Order  Output Format
Flag            1                       hex
Address         1                       hex
Control         1                       hex
DataType        1                       decimal
LineIndex       1                       decimal
PollAddress     2           msb         hex
DataSize        2           lsb         decimal
Data            (DataSize)              ascii
CRC             2           lsb         hex
Flag            1                       hex

나는 다음과 같은 출력을 얻을 것이다.

Flag            0x7e
Address         0xff
Control         0x00
DataType        123
LineIndex       0
PollAddress     0x1386
DataSize        4
Data            "ABCD"
CRC             0xef56
Flag            0x7e

하드웨어 기반 프로토콜 분석기는 종종 이런 종류의 작업을 수행하는 멋진 기능을 가지고 있지만 텍스트 로그 파일로 작업해야합니다.

그러한 유틸리티 나 라이브러리가 존재합니까?


현상금을 설립 한 이후 몇 가지 좋은 대답이 나왔습니다. 바운티가 작동하는 것 같아요!

Wireshark와 Hexedit는 둘 다 유망한 것처럼 보입니다. 나는 그것들을 살펴보고, 내 필요에 맞는 사람에게 현상금을 적용 할 것입니다. 그러나 나는 여전히 다른 아이디어에 열려 있습니다.

도움이 되었습니까?

해결책

Wireshark 네트워크 프로토콜을 여는 데 능숙합니다.

다른 팁

좋은 16 진 편집자가 필요하다고 생각합니다. 살펴보십시오 헥사트. 나는 과거에 무료 버전을 사용했고 좋지만, 그것이 당신이 찾고있는 것을 제공하는지 모르겠습니다. 기본적으로 구조물을 정의한 다음 16 진수 데이터를 해독 할 수 있기를 원합니다. 좋은 16 진 편집자가 이것을 지원할 것이라고 생각합니다. 다른 편집자는 유료 버전의 Hexedit 또는 Google을 확인하십시오. 사용 가능한 많은 것들이 있습니다.

일반적으로 EMACS HEXL 모드를 사용하여 이진 파일을 "텍스트 덤프"로보십시오. 보다 구체적인 출력이 필요할 때, 나는 당신과 마찬가지로 C ++로 구문 분석기를 작성합니다.

내 직무에서 우리는 임베디드 하드웨어를 제어하기 위해 네트워크 및 직렬 프로토콜을 설계하고있었습니다. 또한 덤프를 잘못 읽고 각 프로토콜에 대한 스크립트를 작성하는 데 지쳤습니다. 프로토콜에 대한 텍스트 파일 설명을 제공 할 수 있으며 단일 비트를 설정하기위한 GUI 지원 확인란, 유효한 비트 조합을 선택하기위한 라디오 버튼 및 선택이 많을 때 드롭 다운 목록을 선택할 수 있습니다. 데이터의 HEX보기, 각 필드의 이진보기 또는 필드를 포인트하고 클릭 할 수 있으며 다른 모든보기가 업데이트됩니다. 그것은 우리에게 많은 시간을 절약했습니다. 조금 빠르고 더러워 지지만 고용주가 소유하지 않았다면 게시 할 것입니다. 요점은 글을 쓰기가 그리 어렵지 않았고, 각 프로토콜에 대한 스크립트와 프로토콜에 대한 설명을 이해할 수있는 하나의 프로그램에서 벗어나면 상황이 훌륭했습니다. 우리는 덤프를 잘못 읽는 것과 관련된 나사를 멈추고 새로운 프로토콜을 추가하는 것이 사소했습니다. 또한 프로토콜에 대한 텍스트 설명은 개발 사양으로 바로 들어가서 소프트웨어 직원이 하드웨어로 무엇을 해야하는지 알게되었습니다. 나는 당신이 그것에 균열을 일으키는 것이 좋습니다.

한 가지 가능한 출발점이 될 것입니다 libpdl, C ++ 라이브러리.

또 다른 옵션 일 수 있습니다 netpdl.

당신은 사용해야합니다 TCL 바이너리 이와 같은 물건에 대한 명령. 다음은 위의 예제의 시작점입니다. TCL은 스크립트를 배우고 쓰기 쉽습니다. 연쇄 통신 작업을 수행하는 경우 적어도 기본 사항을 배우도록 빚을지고 있습니다.

bash$ tclsh
% binary scan [binary format H* 7eff007b00138604004142434456ef7e] \
  H2H2H2ccH4sa4h4H2 \
  flag1 addr ctl datatype lineidx polladdr datasize data crc flag2
10
% puts "$flag1 $addr $ctl $datatype $lineidx \
  $polladdr $datasize $data $crc $flag2"
7e ff 00 123 0 1386 4 ABCD 65fe 7e

바이트 주문을 할 때 바이트를 바이트 주위로 바꾸지 만 비트는 아니 었으므로 거기에서 무엇을 찾고 있는지 잘 모르겠습니다. 어쨌든, 이것은 당신을 시작할 것입니다.

살펴보십시오 Hexworkshop

나는 육각 덤프를 분석하기 위해 몇 년 동안 그것을 사용해 왔습니다. C/C ++ 스타일로 데이터 구조 A를 정의한 다음 해당 형식으로 데이터를 표시 할 수있는 구조 뷰어가 있습니다.

Winhex 사용자 정의 레코드 형식 표시/편집을 지원합니다. 몇 가지 예가 있습니다 http://www.x-ways.net/winhex/templates/index.html

나는 CPAN에서 그런 것을 보았을 것이라고 확신합니다. 당신이 좋아한다면 나는 더 모호 할 수 있습니다. :-)

업데이트: 정확히 당신이 원하는 것이 아니지만 살펴보세요 구문 분석 :: binary :: 고정식

BSD 명령 줄 유틸리티가 호출됩니다 hexdump 이는 형식 문자열을 사용하여 (외부 파일에있을 수 있음)를 통해이를 수행합니다. 보다 https://www.suse.com/communities/blog/making-sense-hexdump/ 소개 및 예를 들어 https://www.freebsd.org/cgi/man.cgi?query=hexdump&sektion=1 수동 페이지의 경우 (특별한주의를 기울여 -e 그리고 -f 옵션과 제목의 섹션 형식).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top