5

私はさまざまなデバイスとのシリアル通信を頻繁に使用するため、ログ ファイルの 16 進ダンプを分析する必要がよくあります。現在、ダンプを見て、プロトコル仕様を見て、結果を書き留めることで、これを手動で行っています。ただし、これは面倒でエラーが発生しやすく、特にメッセージに数百バイトが含まれ、ビッグエンディアンとリトルエンディアンのデータ、ASCII、Unicode、圧縮、CRC、. . . .

より一般的なケースを支援するために、いくつかの Python スクリプトを作成しました。しかし、処理するプロトコルはたくさんあります。また、分析するダンプがたくさんあることがわかっていない限り、カスタム スクリプトの作成に時間を費やすのは意味がありません。

私が望むのは、このアクティビティを自動化できるある種のユーティリティです。たとえば、次のようなテキスト 16 進ダンプがあるとします。

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 はどちらも有望に見えます。私はそれらを見て、おそらく私のニーズに合った方に報奨金を授与します. しかし、私はまだ他のアイデアに対してオープンです。

4

10 に答える 10

2

Wiresharkは、ネットワークプロトコルを開くのに非常に優れています。

于 2009-02-05T17:54:41.140 に答える
2

優れた 16 進エディタが必要だと思います。hexeditを見てください。私は過去に無料版を使用しましたが、それは良いですが、あなたが探しているものを提供しているかどうかはわかりません. 基本的に、構造体を定義してから、それに対して 16 進データをデコードできるようにする必要があります。優れた 16 進エディタがこれをサポートすると思います。HexEdit の有料版または Google で別のエディターを確認してください。たくさんあります。

于 2009-02-05T20:57:24.343 に答える
1

通常、私はemacs hexl-modeを使用して、バイナリファイルを「テキストダンプ」として表示します。より具体的な出力が必要な場合は、あなたと同じようにC++でパーサーを記述します。

于 2009-02-05T17:57:20.433 に答える
1

考えられる出発点の1つは、C++ライブラリであるlibPDLです。

別のオプションはNetPDLかもしれません。

于 2009-02-06T07:32:15.530 に答える
1

私の仕事では、組み込みハードウェアを制御するためのネットワークプロトコルとシリアルプロトコルを設計していました。また、ダンプの読み取りを間違えたり、プロトコルごとにスクリプトを記述したりすることにうんざりしていたので、あなたが説明したことを正確に実行するためのライブラリを作成しました。プロトコルのテキストファイルの説明を与えることができ、シングルビットを設定するためのチェックボックスをサポートするGUI、ビットの有効な組み合わせから選択するためのラジオボタン、および選択肢が多い場合のドロップダウンリストがありました。データの16進ビュー、各フィールドのバイナリビューを編集したり、フィールドをポイントアンドクリックしたりすると、他のすべてのビューが更新されます。それは私たちにたくさんの時間を節約しました。少し速くて汚いですが、雇用主が所有していない場合は投稿します。重要なのは、書くのはそれほど難しくなかったということです。そして、各プロトコルのスクリプトから、プロトコルの説明を理解できる1つのプログラムに移ると、物事は素晴らしかったです。ダンプの誤読に関連する混乱をやめ、新しいプロトコルの追加は簡単になりました。さらに、プロトコルのテキストによる説明が開発仕様に直接組み込まれているため、ソフトウェア担当者はハードウェアをどうするかを知ることができます。私はあなたがそれをクラックすることをお勧めします。

于 2009-02-05T18:31:12.033 に答える
1

このようなものには、 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

バイトオーダーの処理を行ったとき、ビットではなくバイトを切り替えたので、そこで何を探していたのかよくわかりません。とにかく、これで始められます。

于 2009-02-06T09:02:42.993 に答える
1

hexworkshopをご覧ください

私は何年もそれを使用して、16進ダンプを分析してきました。C/C++ スタイルでデータ構造を定義し、その形式でデータを表示できる構造ビューアがあります。

于 2009-02-07T05:57:52.863 に答える
1

WinHexは、ユーザー定義のレコード形式の表示/編集をサポートしています。にいくつかの例がありますhttp://www.x-ways.net/winhex/templates/index.html

于 2009-02-07T06:08:20.550 に答える
0

CPANでそのようなものを見たと確信しています。あなたが望むなら、私はもっと曖昧にすることができます。:-)

更新:それはまさにあなたが望むものではありませんが、Parse::Binary::FixedFormatを見てください。

于 2008-10-10T14:42:47.937 に答える