how to build and debug wireshark2.4.2 source code

前言

现在开始玩抓包了。
对于一些已知协议,是wireshark已经分析好的,可以拿来借鉴。
如果再自己分析,划不来。自己分析的也不如wireshark分析的那么清晰和全面。
另外,wireshark工程的架构也是值得学些的。
要学习wireshark工程,第一步就是编译调试wireshark的源码。

wireshark如何编译,官方有帮助文档。
https://www.wireshark.org/docs/wsdg_html_chunked/ChSetupWin32.html

可惜,照这个文档,没编译通过,太多依赖的软件了。
后来找了一篇资料,那个同学是用vs2013编译的wireshark2.0, 很有参考价值。基本知道编译的路子了,又折腾了6个小时,终于可以编译通过,并调试了。

实验

实验环境

vmware12.5.5 + vs2015 + qt5.9.3 + cygwin

试验材料

试验做通后,将临时文件删了,将整个试验的文件夹C:\Development压缩了一下.
wireshark_Development.7z
如果从wireshark_Development.7z开始编译,将wireshark_Development.7z释放到C盘.

open vs2015 cmd line

cd c:\Development

call env.bat

cd wsbuild32

cmake -DENABLE_CHM_GUIDES=on -G "Visual Studio 14 2015 Win64" ..\wireshark

cd C:\Development\wsbuild32
run Wireshark.sln

因为临时文件被删掉了(包括运行时需要的Qt*.DLL都不在wireshark输出目录下),需要重新编译一下ALL_BUILD工程. 然后再编译wireshark工程和新增加的wireshark插件工程,这样才能正常调试运行。
这里写图片描述

实验环境的选择

现在的开发系统都是x64的windows, 开发机是win10.
wireshark2.4.2要求是用vs2015编译。
但是win10上装vs2015要好长时间,而且vs这东西在一台计算机上不能装多个版本(e.g. 混装了vs2015,vs2010), 已经遇到混装后,vs2010编译出来的控件,不能在发布环境运行的前车之鉴。
如果只在win10真机上装vs2015, 也遇到win10重大升级后,vs2015新建出来的vc工程不能编译的问题。
最后,选择在vmware虚拟机中装一个win7x64, 在win7x64给8GB内存上装vs2015。在这个基础上安装wireshark需要的编译环境。

依赖软件的安装

wireshark文档上,对于新手有如下警告:

Unless you know exactly what you are doing, you should strictly follow the recommendations below. They are known to work and if the build breaks, please re-read this guide carefully.

其实对于新手,文档写的都远远不够详细。
每个人由于环境的不同,文档上不可能都写到的。都是不断的实验,不断的折腾。

选择自动安装依赖的软件

文档上说要用Chocolatey,我用的并不好,没安装成功依赖的软件。有漏掉的依赖软件,命令行对新手也不友好。
最后所有的依赖软件都用cygwin来装,装多点不怕,就怕装的不够全。

依次安装

vs2015

已经预先在vmware中的win7x64中装了一个完整版的。
默认安装路径

QT

wireshark文档中要求是QT5.9,去qt站点上注册账号,下载开源版本的qt5.9.3.
qt-opensource-windows-x86-5.9.3.exe
默认安装路径

python

wireshark文档中要求可以是python3或python2, 下载了一个python2最新版。
python-2.7.14.amd64.msi
默认安装路径

cmake

cygwin装的cmake不全,单独装了一个。
cmake-3.10.0-win64-x64.msi
默认安装路径

cygwin

官网下载了cygwin setup 2.882 x64, 在线安装。
setup-x86_64.exe
默认安装路径
先选只下载full模式,不安装,将所有cygwin软件都拖到本地C:\tools,总共18GB(只是为了省心,再运行cggwin setup 就从本地路径开始装)。

用cygwin装时,先装一遍full模式,default改成install, 将默认的依赖软件都装一遍(因为不熟,估计也不是必须)

在单独运行cygwin, 将文档上要求的依赖软件都装一次,因为不熟,每装一个依赖软件,都重新运行一次cygwin, 挫。

Devel/bison (or install Win flex-bison - see Chocolatey below)
Devel/flex (or install Win flex-bison - see Chocolatey below)
Devel/git (recommended - see discussion about using Git below)
Interpreters/perl
Utils/patch (only if needed) (may be Devel/patch instead)
Web/wget (not needed if using CMake)
Text/asciidoc
Text/docbook-xml45
Interpreters/m4

配置环境变量

编译源码时,需要一个环境变量,文档上没写,看出错信息知道要设置这个环境变量。
PLATFORM=win64

下载wireshark源码

最新的稳定版时2.4.2.
wireshark-2.4.2.tar.xz

编译wireshark

建立C:\Development目录,将wireshark-2.4.2.tar.xz用7zip解开2次,将wireshark-2.4.2目录改名为wireshark目录,拷贝到C:\Development\。
建立C:\Development\wsbuild32目录.
在C:\Development\目录中建立一个批处理文件env.bat,用来设置环境变量。

@echo off
rem @file env.bat
rem Let CMake determine the library download directory name under
rem WIRESHARK_BASE_DIR or set it explicitly by using WIRESHARK_LIB_DIR.
rem Set *one* of these.
set WIRESHARK_BASE_DIR=C:\Development
rem set WIRESHARK_LIB_DIR=c:\wireshark-win64-libs
rem Set the Qt installation directory
rem set QT5_BASE_DIR=C:\Qt\5.9.1\msvc2015_64
set QT5_BASE_DIR=C:\Qt\Qt5.9.3\5.9.3\msvc2015_64
rem Append a custom string to the package version. Optional.
set WIRESHARK_VERSION_EXTRA=-LsBuild
rem Chocolatey installs Cygwin in an odd location
rem set WIRESHARK_CYGWIN_INSTALL_PATH=C:\ProgramData\chocolatey\lib\Cygwin\tools\cygwin
set WIRESHARK_CYGWIN_INSTALL_PATH=C:\cygwin64

用cmake制作.sln工程文件

打开vs2015命令行

进入到c:\Development目录
cd c:\Development

调用环境设置脚本
call env.bat

进入到build专用目录
cd wsbuild32

开始生成Wireshark.sln和其他子工程文件
cmake -DENABLE_CHM_GUIDES=on -G “Visual Studio 14 2015 Win64” ..\wireshark

这步要是显示错误,就看错误信息,将其他没找到的依赖软件用cygwin装上。
最后,显示如下信息就成功了。

-- Configuring done
-- Generating done
-- Build files have been written to: C:/Development/wsbuild32

build wireshark工程

文档上用msbuild的方法不好使,可能文档是写给最新版的,而不是wireshark2.4.2
我直接用vs2015打开生成好的Wireshark.sln,选择Debugx64模式编译成功。

在win10真机中先装一个官方发布的安装版wiresharkx64.
生成好的debug版wireshark,拷贝到非编译环境的win10中,不能运行,报错。
生成好的release带调试信息的wireshark版本目录拷贝到win10真机中,是可以运行的。
看版本号,已经是自己编译的wireshark版本。

调试wireshark

只能在编译环境下调试。
先下好断点(e.g. packet-pgsql.c的每个函数入口都下断点), 编译debug版后,单独运行debug版的wireshark.exe, 然后用vs2015附加进程wireshark.exe. 当拖入pgsql.cap到wireshark.exe时,就命中packet-pgsql.c中下好的断点了。剩下就是学习wireshark分析协议的事情了。

方便的调试方法

附加调试还是有点不方便。
可以用源码跑起来,直接调试,在main那,可以直接下断点。或在需要的代码处下断点。
首先将整个工程编译过了,然后将工程切到wireshark为激活的工程,F5跑起来,断点命中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值