0

Windows プラットフォームで Wireshark のディセクタを構築しようとしています。しかし、私はエラーが発生しています。

  1. このリンクをたどって Windows のソースから Wireshark をインストールしたところ、ソフトウェアを正常にビルドして実行することができました。
  2. 次に、README.pluginsを使用してプラグインを追加し、ファイルに記載されているすべての変更を行いました。
  3. プラグインを使用すると、正常にビルドされましたが、実行しようとすると、ダイアログ ボックスが表示されますThe plugin 'ABC.dll' has neither a register routine, a register_tap_listener or a register_wtap_module or a register_codec_module routine.。Wireshark は正常に動作していますが、私のプラグインは含まれていません。
  4. Linux 環境: Linux プラットフォームでコンパイルして実行しようとしましたが、プラグインを含めて問題なく動作しました。
    Windowsプラットフォームでどこが間違っているのか、誰か教えてください。ありがとう。
4

1 に答える 1

0

Windows でプラグインをビルドすると、DLL 内の特定のシンボルがエクスポートされたものとして宣言され、実行時に DLL 内で見つけられるようになるというちょっとした魔法があります。(最近すべての詳細を掘り下げたわけではありませんが、*nix ではメカニズムが異なるため、各プラットフォームでの結果は異なる可能性があります)。

ビルドしている Wireshark のバージョンは何ですか? (Wireshark のソースはどのように入手していますか?)

表示される特定のエラー メッセージは、WWireshark 1.10 のバージョンをビルドしている可能性があることを示唆しています。(Wireshark 開発版 (1.11) ではメッセージが変更されています)。

いずれにせよ、DLL が Windows 上でどのようにビルドされているかについては、(明らかに) 正しくありません。

出発点としての私の提案:

Windows のプラグイン ディレクトリにある plugin.c ファイル (ビルド時に生成される) と、他の Wireshark Windows プラグイン ディレクトリの 1 つにある plugin.c を比較すると、何が問題なのかがわかります。

そのファイルで魔法が起こります。

次のようなもの:

WS_DLL_PUBLIC_NOEXTERN void
plugin_reg_handoff(void)
{
  {extern void proto_reg_handoff_unistim (void); proto_reg_handoff_unistim ();}
}
于 2014-02-02T17:22:38.440 に答える