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) 中消息已更改)。

无论如何,关于如何在 Windows 上构建 DLL,有些事情(显然)不太正确。

我的建议作为起点:

通过将 Windows 上的插件目录中的 plugin.c 文件(在构建时生成)与来自其他 Wireshark Windows 插件目录之一的 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 回答