1 Star 0 Fork 0

韩若明溪 / my_notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
GDB调试suricata.md 6.00 KB
一键复制 编辑 原始数据 按行查看 历史
han_gx 提交于 2023-04-23 18:50 . 笔记提交

一、命令行 - GDB 调试 suricata 源码

1. 环境

CentOS8(发行版)

2. 安装 GDB

yum install -y gdb
gdb -v  #查看安装版本

3. 源码安装suricata

源码安装 查看 2. 使用源码安装

4. 启动suricata

suricata -i enp1s0  #无rules跑一网卡的数据

5. 使用gdb启动suricata

gdb suricata  #进入suricata
q			  #退出gdb
run -i enp1s0  #启动 enp1s0 是网口名称

image-20210415143509047

6. gdb 打断点

gdb suricata -tui           #启动文件可视化
b | break  7(num)		    #打断点到第几行 
tb| tbreak                  #设置临时断点, 到达后自动删除
b | break filename num      #在指定文件对应的行设置断点
b | break 0x23f5ff          #用于在内存某一个位置暂停
b | break num if 条件       #条件断点
i | info break|b		    #查看所有断点信息
d | delete 断点编号	         #删除对应的断点
d | delete 7-10  	        #删除断点编号7-10之间的所有断点
clear num                   #要清除的断点行号 num
disable|enable 7   	        #禁用|开启 断点

r               #程序直接运行,不停下来
start           #主程序停下来, n/回车即可单步执行
b *0x7ffff7dd02 #给汇编指令打断点, 然后n单步调试
b main          #直接在main函数上打断点
step            #进入方法中调试
i registers     #查看所有寄存器的值
i registers rbx #查看寄存器rbx的值
i line [num]    #查看源码行数所在的汇编地址和对应的函数

starti          #调试汇编指令, 开始执行 _start 时候, 指令开始停下来, 在这里可以调试汇编
nexti | ni      #对汇编指令逐行调试
stepi           #进入下一个方法的第一行汇编
set disassembly-flavor intel/att #显示汇编风格为intel/att(默认为att), 设置完之后, 需要执行指令 disassemble, 让汇编以新的格式显示
disassemble     #刷新汇编显示(带格式)


layout src      #显示源代码窗口
layout asm:    #显示汇编窗口
layout regs:   #显示源代码/汇编和寄存器窗口
layout split#显示源代码和汇编窗口
layout next:   #显示下一个layout
layout prev:   #显示上一个layout
Ctrl + L        #刷新窗口
Ctrl + x        #再按1:单窗口模式,显示一个窗口
Ctrl + x        #再按2:双窗口模式,显示两个窗口
Ctrl + x        #再按a:回到传统模式,即退出layout,回到执行layout之前的调试窗口。

7. gdb 单步执行 和对变量函数的操作

n | next					#单步执行,不会进入子函数
s | step                    #单步执行,进入子函数        
c | continue				#程序接着执行
finish                      #一直运行到函数返回并打印函数返回时的堆栈地址和返回值及参数值等信息
whatis 变量				     #打印某个变量类型
p | print + 变量/表达式       #用于打印变量或表达式的值
set + 变量 = 变量值          #改变程序中某个变量的值   
return 返回值                #改变当前程序流程,直接返回
call  函数                   #在当前位置执行所要运行的函数

awatch|watch  变量          #设置一个观察点,当变量被读出或是被写入的时候被暂停
rwatch + 变量               #设置一个观察点,当变量被读出时,程序被暂停
catch                       #设置捕捉点来补捉程序运行时的一些事件。如:载入共享库(动态链接库)或是C++的异常
tcatch                      #只设置一次捕捉点,当程序停住以后,应点被自动删除

8. gdb 查看堆栈

bt | backtrace 							#查看详细的堆栈信息
frame       1                           #查看指定的栈帧
info reg                                #查看寄存器的使用情况
info stack                              #查看堆栈的使用情况
up/down                                 #跳到上一层/下一层函数

二、VSCode - GDB可视化调试 suricata 源码

1. 首先使用SSH远程连接到当前linux机器

SSH连接linux开发教程

image-20210416161822184

2. 选择linux下的源码目录

本人的目录是 /home/hgx/suricata-6.0.2

image-20210416170545546

3. 安装插件

远程安装插件如下 C/C++ 和 GDB Debug 即可

image-20210416170759901

4. 配置 launch.json 调试程序

image-20210416170930342

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 启动",
            "type": "cppdbg",
            "request": "launch",
            "program": "/usr/local/bin/suricata", //要启动的程序命令
            "args": [							  //要启动的程序命令参数
                "-i",
                "enp1s0"
            ],
            "stopAtEntry": true,				  //在程序进入main函数的时候停止
            "console":"none",
            "MIMode": "gdb",
            "cwd": "${workspaceFolder}"
        }
    ]
}

5. 点击 F5 即可调试

效果图如下

image-20210416171523661

6.如何控制日志输出终端还是调试台

"console":"none"

  • "none”/“internalConsole" 只输出到"调试控制台","internalConsole"是新版本vscode的选项
  • "integratedTerminal" 同时输出到"调试控制台"和软件内置“终端”
  • "externalTerminal" 输出到外部“终端”

7. 调试控制台使用

vscode 虽然集成了,但是调试的时候不能显示汇编窗口, 需要在调试控制台使用 -exec 指令执行查看汇编, -exec disassemble /m

1
https://gitee.com/han_gx/my_notes.git
git@gitee.com:han_gx/my_notes.git
han_gx
my_notes
my_notes
master

搜索帮助