gdb动态调试工具使用(使用pwndbg插件)

news/2024/9/22 0:15:49/文章来源:https://www.cnblogs.com/zz-pwner/p/18424706

1、加载程序到gdb

将可执行文件a.out加载到gdb调试工具中
$ gdb a.outGNU gdb (Ubuntu 8.1.1-0ubuntu1) 8.1.1
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
pwndbg: loaded 191 commands. Type pwndbg [filter] for a list.
pwndbg: created $rebase, $ida gdb functions (can be used with print/break)
Reading symbols from a.out...(no debugging symbols found)...done.
pwndbg> 
输入Tab键可以查看所有命令
Display all 200 possibilities? (y or n) 输入y显示所有命令
!                                breakrva                         down-silently
+                                brva                             dprintf
-                                bt                               dps
<                                bugreport                        dq
... ...

2、运行程序

(常用)
pwndbg> start
或
pwndgb> run# start的作用是将程序运行至入口点(此处入口点是gdb工具认为的入口点,不一定是main函数)
# run是直接将程序完全执行一遍

3、查看寄存器信息

pwndbg> i r
i: 查看的意思
r: 寄存器的意思
# 此命令在pwndbg插件中很少用,因为默认情况已显示寄存器的信息

4、显示指定范围的汇编指令

disassemble可简写成disass
# 1.显示main函数的汇编代码段
pwndbg> disassemble main
# 2.显示rip寄存器指向的汇编代码段
pwndbg> disassemble $rip
#要使用$符号指定寄存器

5、设置显示的汇编指令格式为intel

pwndbg> set disassembly-flavor intel
#此命令很少使用,因为在pwndbg工具中默认显示的指令格式为intel
#若要更改为amd指令,可设置为set disassembly-flavor att
#如果没有pwndbg插件的话,可以编辑~/.gdbinit文件,添加该命令

6、指令执行

# 1.执行单条汇编指令
pwndbg> ni
# 2.步入汇编指令
pwndbg> si# ni和si的区别在于,ni不会进入函数内部,si会进入函数内部# n s 和 ni si 的区别是,n s 针对的是源代码,ni si针对的是汇编指令# n是next的意思
# ---------------------------------------------------
# 3.跳出函数
pwndbg> finish
当使用si进入某函数调试,需要跳出当前函数时,使用finish命令可以跳出

7、断点设置

# 1.在0x000abc地址处设置断点
pwndbg> b * 0x000abc# 通过偏移进行断点设置(如偏移值为0x00001124)
pwndbg> b *$rebase(0x00001124)# 2.查看断点
pwndbg> i b# 3.将程序运行至断点处
pwndbg> c# 4.设置某断点失效
pwndbg> disable b id
id指的是断点的编号# 5.恢复某失效的断点
pwndbg> enable b id# 6.删除断点
pwndbg> d id

8、打印操作

# 1.打印rip寄存器的值
pwndbg> print $rip # 2.打印rip-0x10的地址值
pwndbg> print $rip-0x10
print命令一般很少用# 3.打印结构体
pwndbg> ptype stdout使用x命令打印内容(非常重要,经常使用)
# 1.打印rip寄存器指向的地址后20条指令
pwndbg> x/20i $rip
x:打印
20:打印的记录数
i:以指令的形式显示其中i可以替换为下面的形式:x:按16进制格式显示变量d:按10进制格式显示变量u:按10进制格式显示无符号整型o:按8进制格式显示变量t:按2进制格式显示变量a:按16进制格式显示变量c:按字符格式显示变量f:按浮点格式显示变量# 2.打印rip寄存器指向的地址后20条数据(包括rip的数据)
pwndbg> x/20b $ripb:表示1字节h:表示2字节w:表示4字节g:表示8字节# 3.可以复合使用,如:打印rip寄存器后20条的数据(包括rip的数据),以1字节的方式输出(十六进制显示)
pwndbg> x/20bx $rip
# telescope:将指定内存空间按照stack命令的格式进行显示
pwndbg> telescope  0x555555558000 20
00:0000│  0x555555558000 (data_start) ◂— 0x0
01:0008│  0x555555558008 (__dso_handle) ◂— 0x555555558008
02:0010│  0x555555558010 ◂— 0x0
03:0018│  0x555555558018 ◂— 0x0
04:0020│  0x555555558020 (stdout@GLIBC_2.2.5) —▸ 0x7ffff7e1b780 (_IO_2_1_stdout_) ◂— 0xfbad2084
... ...

9、设置内存值

# 1.设置0x00abc的内存值为0x61
pwndbg> set *0x00abc=0x61# 2.通过寄存器的方式设置内存值
pwndbg> set * ((unsigned long)$rbp) = 0x61
注:若程序是64位,则强制转换的类型为long,若程序是32位,则强制转换的类型是int# 3.设置$rax+0x10的内存值为0xabcdef
pwndbg> set *((unsigned long)$rax+0x10)=0xabcdef
注:若程序是64位,则强制转换的类型为long,若程序是32位,则强制转换的类型是int

10、打印函数地址

打印函数名为func的地址(有符号表就可以打印出来)
pwndbg> print &func

11、打印栈地址

# 1.打印栈信息
pwndbg> stack# 2.打印栈地址附近的30条信息
pwndbg> stack 30
注意:打印的第一条记录是rsp/esp指向的位置信息

12、cyclic构建字符

# 1.创建30个字符
pwndbg> cyclic 30
aaaabaaacaaadaaaeaaafaaagaaaha# 2.计算生成的字符所在位置
pwndbg> cyclic -l iaaa
32

13、打印字符串的地址

# 1.打印字符串"/bin/sh"所在的地址
pwndbg> search "/bin/sh"

14.查看内存

pwndbg> vmmap

15.查看plt、got、elf

# 1、查看plt表
pwndbg> plt
# 2、查看got表
pwndbg> got
# 3、查看elf表
pwndbg> elf

16.子进程调试设置

# 1.设置调试父进程/子进程
set follow-fork-mode [parent|child]# 2.查询当前fork模式
show follow-fork-mode# 3.设置其它线程不执行,只有调试线程执行
set scheduler-locking [on|off|step]# 4.显示线程
info thread# 5.切换线程
thread id# 6.GDB为特定线程设置断点
break location thread id

17.寻找TLS结构体地址

# 查找TLS结构体地址的gdb命令
fsbase

18、堆的相关操作

# 查看堆块内容情况
> vis# 查看bins结构
> bins# 查看分配的堆块
> heap# 查看堆块状态
> par

w、pwndbg显示设置

若需要将pwndbg的显示放在第二个终端,则在~/.gdbinit文件处添加以下内容

set context-output /dev/pts/1

x、退出gdb调试

pwndbg> quit
或者可以直接简写:q

后续有待补充... ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/801273.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九宫格(html css实现)---初识flex布局

记录flex属性并实现一个九宫格 flex属性 Flex 容器: 需要注意的是:当时设置 flex 布局之后,子元素的 float、clear、vertical-align 的属性将会失效 .container {display: flex; }//块状元素.container {inline-flex; }//行内元素块状元素 1.*** 独占一行:块元素会自动开…

利用Adguard屏蔽必应搜索中的CSDN内容

### 原因众所周知,CSDN 搜索结果,内容复制需要魔法,有的还需要关注,啥都要钱,质量还特别差虽然 百度和必应可以写参数直接去除CSDN 搜索结果,但每次都要写很麻烦### 解决办法原因 众所周知,CSDN 搜索结果,内容复制需要魔法,有的还需要关注,啥都要钱,质量还特别差 虽…

windows应急响应(二)

1.启动项win+r 输入msconfig,在"工具"里找到“任务管理器”;(底部任务栏右键,也可打开),查看启动项一般应用启动项位置:C:\Users\adnim\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupwin+r 输入msinfo32,在"软件环境"里可以看到Au…

领导大规模敏捷Leading SAFe认证培训课

领导大规模敏捷Leading SAFe认证课

asio的buffer

ASIO的buffer理解 asio的buffer结构 任何网络库都有提供buffer的数据结构,这个就是收发数据的缓冲区。 asio提供了mutable_buffer 和 const_buffer这两个结构,他们都是一段连续的空间,首字节存储了后续数据的长度。mutable_buffer用于写服务,const_buffer用于读服务。但是这…

格林公式7

例1 计算积分 \[I=\int_Cx^2ydx-xy^2dy, \]其中C是上半圆 \(\begin{aligned} & \text{ }x^2+y^2=a^2,y\geqslant0,\text{ }\\ & \end{aligned}\) 逆时间方向 \[\begin{aligned} & \text{ }x^2+y^2=a^2,y\geqslant0,\text{ }\\ & \end{aligned} \]考虑到上半…

9.21 abc372f

容易发现平移操作,都是 \(to\) 向左平移。然后更新完了过后,\(x\) 再左移。 当然 dp 数组整体是左移的。 本题一个重点就是,假设整个 dp 不动,让我们的操作反着动。

基于AODV和leach协议的自组网络平台matlab仿真,对比吞吐量,负荷,丢包率,剩余节点个数,节点消耗能量

1.算法仿真效果 matlab2017b仿真结果如下(完整代码运行后无水印):本程序系统是《m基于matlab的AODV,leach自组网网络平台仿真,对比吞吐量,端到端时延,丢包率,剩余节点个数,节点消耗能量》的的升级。升级前原文章链接增加了运动节点的路由测试,包括定向运动,随机运动,静止…

笛卡尔坐标张量简介7

张量(tensor) 这一术语最初是用来描述弹性介质各点应力状态的,后来发展成为力学和物理学的一个有力数学工具,目前力学方面的理论性文献都不同程度地这用了这一工具 由坐标原点和三条不共面的标架直线构成的坐标系称为直线坐标系,如果三标架直线上的单位尺度相同,称为笛卡…

尝试RVC音色克隆团长音色

前言 昨晚玩剑网3突发奇想,把团长声音克隆下来,利用语音喵制作成语音DBM。 这样不管团长开不开团,打团也能有团长声音听了诶嘿嘿。 于是当场关闭游戏声音录了打本的素材,本文就边做边记录。 下载 在B站找到了这个教程: 【你的声音,现在是我的了!】https://www.bilibili.…