how to build and debug wireshark2.4.2 source code

来源:互联网 发布:excel对比两列数据异同 编辑:程序博客网 时间:2024/04/29 20:26

前言

现在开始玩抓包了。
对于一些已知协议,是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

实验环境的选择

现在的开发系统都是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/perlUtils/patch (only if needed) (may be Devel/patch instead)Web/wget (not needed if using CMake)Text/asciidocText/docbook-xml45Interpreters/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 offrem @file env.batrem Let CMake determine the library download directory name underrem WIRESHARK_BASE_DIR or set it explicitly by using WIRESHARK_LIB_DIR.rem Set *one* of these.set WIRESHARK_BASE_DIR=C:\Developmentrem set WIRESHARK_LIB_DIR=c:\wireshark-win64-libsrem Set the Qt installation directoryrem set QT5_BASE_DIR=C:\Qt\5.9.1\msvc2015_64set QT5_BASE_DIR=C:\Qt\Qt5.9.3\5.9.3\msvc2015_64rem Append a custom string to the package version. Optional.set WIRESHARK_VERSION_EXTRA=-LsBuildrem Chocolatey installs Cygwin in an odd locationrem set WIRESHARK_CYGWIN_INSTALL_PATH=C:\ProgramData\chocolatey\lib\Cygwin\tools\cygwinset 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
原创粉丝点击