9

BER でエンコードされたファイルを読み書きするための C++ (またはその他の) コードを自動的に生成できるツールがいくつかあります。私の C++ プロジェクトでは、BER でエンコードされたファイルを読み取って変更するためのライブラリが必要です。特定のデータ構造がないため、特定のデータ構造に基づいて C++ クラスを生成できません。ユーザーは、整数や文字列などを追加および削除できる必要があります。この種の機能を備えたエディターを持つオープン ソース プロジェクトを見つけました: http://www.codeproject.com/Articles/4910/ASN-1-Editor

しかし、これはC#で....

私の C++ プロジェクトに使用できる、この機能を備えた優れた C++ ライブラリを入手する方法を知っている場合は、お知らせください。

4

3 に答える 3

2

少なくともスキーマの知識がなければ、任意の BER データを明確に解析することは不可能であるため、一般的な BER 読み取りライブラリはそれほど多くありません。

CodeProjectであなたが指し示しているツールは、BERエンコーディングを作成するために使用されるASN.1スキーマを編集しますが、データについて何も知らずに、または推測することなく、他の方向に進むことはできません. BER 要素の ID と長さを調べても、その要素にプリミティブ データが含まれているのか、他の BER 要素が含まれているのかを判断する方法はありません。

これは、問題を実証するために私が思いついた最小の例です。わずか 5 バイトで、2 つの根本的に異なる解釈があります。

0xA0 0x03 0x02 0x01 0x00

これは明らかに構築されたコンテキスト固有の型です。長さも決まっています。しかし、その中には何がありますか?あなたは言うことができません!

整数の場合もあります (0x02 は整数のプリミティブ タグ、0x01 は長さ、値 0x00)。

ただし、ビット文字列の場合もあります (ビット文字列を構築型に入れることができます。2 は最後に使用されていないビットの数です。つまり、14 ビットで、0000 0001 0000 00xxb = 00 0000 0100 になります。 0000b = 0x0040。

BER ファイルの読み取り/変更/書き込みを行うエディターを作成できますが、スキーマを認識している必要があります。そうしないと、何も適切に読み取ることができなくなります。

于 2013-11-22T21:24:58.127 に答える
2

正しい ASN 定義ファイルがあることを確認してください。次に、 http://lionet.info/asn1c/asn1c.cgiにリンクします。

指定されたウィンドウに ASN 定義を貼り付けます。「ASN.1コンパイルを続行」ボタンを押します。コンパイル エラーが発生した場合は、それらを修正します。コンパイルが成功すると、デコーダーのコードが生成されます。試してみてください。

于 2013-01-17T14:07:02.853 に答える