首页 > 其他分享 >gdb使用个pwndbg安装

gdb使用个pwndbg安装

时间:2024-06-24 12:03:25浏览次数:24  
标签:显示 查看 安装 0x123456 gdb 指令 rdi pwndbg 断点

安装pwndbg

git clone https://github.com/pwndbg/pwndbg

cd pwndbg
./setup.sh

基本命令

help //帮助

i //info,查看一些信息,只输入info可以看可以接什么参数,下面几个比较常用:
i b //常用,info break 查看所有断点信息(编号、断点位置)
i r //常用,info registers 查看各个寄存器当前的值
i f //info function 查看所有函数名,需保留符号

show //和info类似,但是查看调试器的基本信息,如:
show args //查看参数

rdi // +寄存器名代表一个寄存器内的值,用在地址上直接相当与一个十六进制变量

backtrace //查看调用栈

q //quit 退出

执行命令

s //s单步步入,遇到调用跟进函数中,相当于step into,源码层面的一步
si //同s,汇编层面的一步

n //next,单步补过,遇到调用不跟进,相当于step over,源码层面的一步
ni //nexti,同n,汇编层面的一步

c //continue,继续执行到断点,没断点就一直执行下去

r //run,重新开始执行

断点指令

普通断点指令b(break):

b *(0x123456) //给0x123456地址处的指令下断点

b *$ rebase(0x123456) //$rebase 在调试开PIE的程序的时候可以直接加上程序的随机地址

b function_name //给函数fun_name下断点,目标文件要保留符号才行

b file_name:fun_name
b file_name:15 //给file_name的15行下断点,要有源码才行

b 15//单个文件的第15行

b +0x10 //在程序当前停住的位置下0x10的位置下断点,同样可以-0x10,就是前0x10

break fun if \$rdi==5 //条件断点,rdi值为5的时候才断
删除、禁用断点:


使用info break(简写: i b)来查看断点编号

delete 5 //删除5号断点,直接delete不接数字删除所有

disable 5 //常用,禁用5号断点

enable 5 //启用5号断点

clear //不加参数默认清除当前函数所在行的所有断点

clear function //删除该函数内的所有断点

clear line //删除该行的所有断点
内存断点指令watch:


watch 0x123456 //0x123456地址的数据改变的时候会断

watch a //变量a改变的时候会断

info watchpoints //查看watch断点信息
捕获断点catch:


catch syscall //syscall系统调用的时候断住

tcatch syscall //syscall系统调用的时候断住,只断一次

info break //catch的断点可以通过i b查看


除syscall外还可以使用的有:

1)throw: 抛出异常

2)catch: 捕获异常

3)exec: exec被调用

4)fork: fork被调用

5)vfork: vfork被调用

6)load: 加载动态库

7)load libname: 加载名为libname的动态库

8)unload: 卸载动态库

9)unload libname: 卸载名为libname的动态库

10)syscall [args]: 调用系统调用,args可以指定系统调用号,或者系统名称

打印指令

查看内存指令x:
  • x /nuf 0x123456 //x指令的格式是:x空格/nfu,nfu代表三个参数
    • n 代表显示几个单元(而不是显示几个字节,后面的u表示一个单元多少个字节),放在’/'后面
    • u 代表一个单元几个字节,b(一个字节),h(二个字节),w(四字节),g(八字节)
    • f代表显示数据的格式,f和u的顺序可以互换,也可以只有一个或者不带n,用的时候很灵活
      • x 按十六进制格式显示变量。
      • d 按十进制格式显示变量。
      • u 按十六进制格式显示无符号整型。
      • o 按八进制格式显示变量。
      • t 按二进制格式显示变量。
      • a 按十六进制格式显示变量。
      • c 按字符格式显示变量。
      • f 按浮点数格式显示变量。
      • s 按字符串显示。
      • b 按字符显示。
      • i 显示汇编指令。
  • x /10gx 0x123456 //常用,从0x123456开始每个单元八个字节,十六进制显示是个单元的数据
  • x /10xd \$rdi //从rdi指向的地址向后打印10个单元,每个单元4字节的十进制数
  • x /10i 0x123456 //常用,从0x123456处向后显示十条汇编指令
打印指令p(print):
  • p fun_name //打印fun_name的地址,需要保留符号
  • p 0x10-0x08 //计算0x10-0x08的结果
  • p &a //查看变量a的地址
  • p *(0x123456) //查看0x123456地址的值,注意和x指令的区别,x指令查看地址的值不用星号
  • p \$rdi //显示rdi寄存器的值,注意和x的区别,这只是显示rdi的值,而不是rdi指向的值
  • p *($rdi) //显示rdi指向的值
打印汇编指令disass:

disassemble的缩写

disass 0x123456 //显示0x123456前后的汇编指令
x /10i //我一般喜欢用x显示指令

打印源代码指令list:

list //查看当前附近10行代码,要有源码,list指令pwn题中几乎不用,但为了完整性还是简单举几个例子
list 38 //查看38行附近10行代码
list 1,10 //查看1-10行
list main //查看main函数开始10行

修改和查找指令

修改数据指令set:

set $​rdi=0x10 //把rdi寄存器的值变为0x10
set *(0x123456)=0x10 //0x123456地址的值变为0x10,注意带星号
set args “abc” “def” “gh“//给参数123赋值
set args “python -c ‘print “1234\x7f\xde”’” //使用python给参数赋值不可见字符

查找数据:

search rdi //从当前位置向后查包含rdi的指令,返回若干
search -h //查看search帮助,我也不太常用这个指令
find “hello” //查找hello字符串,pwndbg独有
ropgadget //查找ropgadget,pwndbg独有,没啥用,可以用其他工具

堆操作指令

pwndbg插件独有

    arena //显示arena的详细信息
    arenas //显示所有arena的基本信息
    arenainfo //好看的显示所有arena的信息
    bins //常用,查看所有种类的堆块的链表情况
    fastbins //单独查看fastbins的链表情况
    largebins //同上,单独查看largebins的链表情况
    smallbins //同上,单独查看smallbins的链表情况
    unsortedbin //同上,单独查看unsortedbin链表情况
    tcachebins //同上,单独查看tcachebins的链表情况
    tcache //查看tcache详细信息
    heap //数据结构的形式显示所有堆块,会显示一大堆
    heapbase //查看堆起始地址
    heapinfo、heapinfoall //显示堆得信息,和bins的挺像的,没bins好用
    parseheap //显示堆结构,很好用
    tracemalloc //好用,会跟提示所有操作堆的地方

其他pwndbg插件独有指令

cyclc 50 //生成50个用来溢出的字符,如:aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaama

    $reabse //开启PIE的情况的地址偏移

    b *$reabse(0x123456) //断住PIE状态下的二进制文件中0x123456的地方

    codebase //打印PIE偏移,与rebase不同,这是打印,rebase是使用

    stack //查看栈

    retaddr //打印包含返回地址的栈地址

    canary //直接看canary的值

    plt //查看plt表

    got //查看got表

    hexdump //想IDA那样显示数据,带字符串

参考文章:pwndbg的安装和gdb使用-CSDN博客

标签:显示,查看,安装,0x123456,gdb,指令,rdi,pwndbg,断点
From: https://blog.csdn.net/biu801/article/details/139909978

相关文章

  • CentOS 7安装Docker,并进行docker加速,拉取镜像
    #step1:安装必要的一些系统工具sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#Step2:添加软件源信息sudoyum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#Step3:更新并安装Docker-CEsudoy......
  • 'MMDetection3D'+'waymo-open-dataset-tf-2-6-0'+'pytorc2.3.1+cu121'安装
    安装pytorc2.3.1+cu121步骤1.创建并激活一个conda环境condacreate-nmmdpython=3.8-ycondaactivatemmd步骤2.基于PyTorch官方说明安装PyTorch,例如:pip3installtorchtorchvisiontorchaudio--index-urlhttps://download.pytorch.org/whl/cu121步骤3.验......
  • 同样的软件版本、安装方法,但互联网环境就没有报错,是不是哪个地方设置不对?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【斌】问了一个Python第三方库离线下载后使用失败的问题,问题如下:再次请教大佬,还是上述问题,同样的软件版本、安装方法,但互联网环境就没有报错,是不是哪个地方设置不对?@隔壁......
  • VMware Workstation环境下DNS的安装配置,并使用ubuntu来测试
    需求说明:某企业信息中心计划使用IP地址17216.11.0用于虚拟网络测试,注册域名为xyz.net.cn.并将172.16.11.2作为主域名的服务器(DNS服务器)的IP地址,将172.16.11.3分配给虚拟网络测试的DHCP服务器,将172.16.11.4分配给虚拟网络测试的web服务器,将172.16.11.5分配给FTP服务器,将......
  • Ubuntu下安装、运行Nginx
    安装Ubuntu桌面系统(虚拟机)_虚拟机安装ubuntu桌面版-CSDN博客默认情况下,Ubuntu并没有安装Nginx服务。用户可以使用以下命令安装Nginx服务及其相关的组件:liu@ubuntu:~$sudoaptinstallnginx安装完成之后,使用以下命令启用和启动Nginx服务:liu@ubuntu:~$sudosystemctlenab......
  • Linux gdb lldb面试题及参考答案(万字长文)
    什么是GDB?简述其主要功能。GDB(GNUDebugger)是GNU项目的一部分,是一个功能强大的源代码级别的调试器,主要用于C、C++和其他多种编程语言的程序调试。GDB提供了丰富的功能来帮助开发者理解程序内部的工作方式,诊断并修复代码中的错误。其主要功能包括但不限于:启动程序:可以在GDB......
  • 安装 Hexo
    序言安装和配置Git安装NVM和Node安装和配置Git安装和配置HexoGit下载链接#安装Gitapt-get-yinstallgit#配置Gitgitconfigglobaluser.name="testname"gitconfigglobaluser.email="[email protected]"安装NVM和Nodenvm文档nvm-windows下载链接#安装Node......
  • centos7&国产uos&银河麒麟系统安装MYSQL
     1.解压  tar -zxvf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.34-linux-glibc2.12-x86_64 mysql 2. 先检查是否有mysql用户组和mysql用户,没有就添加有就忽略:groupsmysql  添加用户组和用户groupaddmysql&&useradd-r-gmys......
  • oracle 19c 安装、卸载
    Oracle数据库19c下载安装安装登录oracle官网进入下载界面https://www.oracle.com/cn/database/technologies/oracle-database-software-downloads.html#db_free选择OracleDatabase19cforMicrosoftWindowsx64(64-bit)下载将下载下来的zip文件解压缩,点击setup.exe运行安......
  • 最全Redis数据库Linux安装
    概念所有的I/O操作全在内存中进行,速度非纯快,性能非常搞。如果断电或停止服务,数据就会消失,而内存型数据库恰好可以弥补类似于MySQL等关系型数据库在硬盘当中进行I/O操作的速度上的局限。redis是key-values键值对的存储格式,非关系型安装过程安装redis数据库之前确保在Linux......