GDB使用技巧和相关插件

news2024/12/24 8:10:45

GDB使用-小技巧

参考:《100个gdb小技巧》

链接中的文档有许多关于GDB的使用小技巧;

$info functions - 列出函数的名称

$s/step - 步入,进入带有调试信息的函数

$n/next - 下一个要执行的程序代码

$call/print - 直接调用函数执行

$i/info - 打印函数堆栈帧信息

$frame [addr] - 选择函数堆栈帧

$i frame - 获取选择的函数堆栈帧的地址

$b []- 设置断点

$p - 打印静态变量的值

$x/s- 打印ASCII字符串

$x/ws- 打印ASCII字符串,宽字节长度为4个字节

$x/hs- 打印ASCII字符串,2个字节长度

gdb中使用“x”命令来打印内存的值,格式为“x/nfu addr”。含义为以f格式打印从addr开始的n个长度单元为u的内存值。参数具体含义如下:

a)n:输出单元的个数。

b)f:是输出格式。比如x是以16进制形式输出,o是以8进制形式输出,等等。

c)u:标明一个单元的长度。b是一个byte,h是两个byte(halfword),w是四个byte(word),g是八个byte(giant word)。

GDB使用-插件

GDB-.gdbinit

gdbinit配置的公共仓库:GitHub - gdbinit/Gdbinit: Gdbinit for OS X, iOS and others - x86, x86_64 and ARM

这个是别人配置的好gdbinit文件库,非常的大,自己用的话还是重新构建一个,这样自己也可以熟悉整个配置,以及了解自己所需要的配置的内容;

在使用插件之前,先看看本地的gdbinit配置文件,如果没有,则新建一个;

vim ~/.gdbinit

#保存历史命令

set history filename ~/.gdb_history

set history save on

#退出时不显示提示信息

set confirm off

#按照派生类型打印对象

set print object on

#打印数组的索引下标

set print array-indexes on

#每行打印一个结构体成员

set print pretty on

GDB-peda

GitHub - longld/peda: PEDA - Python Exploit Development Assistance for GDB

安装:git clone GitHub - longld/peda: PEDA - Python Exploit Development Assistance for GDB~/peda
echo "source ~/peda/peda.py" >> ~/.gdbinit

特性介绍

增强gdb的显示:调试时着色显示反汇编代码、寄存器、内存信息。

添加命令以支持调试和漏洞利用开发(有关命令的完整列表,请使用peda help):

  • aslr -- 显示/设置 GDB 的 ASLR 设置
  • checksec -- 检查二进制的各种安全选项
  • dumpargs -- 在调用指令处停止时显示传递给函数的参数
  • dumprop -- 转储特定内存范围内的所有 ROP 小工具
  • elfheader -- 从调试的 ELF 文件中获取头信息
  • elfsymbol -- 从 ELF 文件中获取非调试符号信息
  • lookup -- 搜索属于内存范围的所有地址/对地址的引用
  • patch -- 补丁内存从字符串/十六进制字符串/整数的地址开始
  • pattern -- 生成、搜索或将循环模式写入内存
  • procinfo -- 显示来自 /proc/pid/ 的各种信息
  • pshow -- 显示各种 PEDA 选项和其他设置
  • pset -- 设置各种 PEDA 选项和其他设置
  • readelf -- 从 ELF 文件中获取头信息
  • ropgadget -- 获取二进制或库的常用 ROP gadgets
  • ropsearch -- 在内存中搜索 ROP 小工具
  • searchmem|find-- 在内存中搜索模式;支持正则搜索
  • shellcode -- 生成或下载常用的shellcode。
  • skeleton -- 生成python漏洞利用代码模板
  • vmmap -- 获取调试过程中段的虚拟映射地址范围
  • xormem -- XOR 内存区域与密钥

GDB-pwndbg

GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made Easy

安装:

git clone GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made Easy

cd pwndbg

./setup.sh

使用说明:pwndbg/FEATURES.md at dev · pwndbg/pwndbg · GitHub

GDB-gef

https://github.com/hugsy/gef

安装:

wget -q -O- https://github.com/hugsy/gef/raw/master/gef.sh| sh

wget -q -O ~/.gdbinit-gef.pyhttps://github.com/hugsy/gef/raw/master/gef.py

echo source ~/.gdbinit-gef.py >> ~/.gdbinit

使用说明:https://gef.readthedocs.io/en/master/

安装完以上三个插件,我们再执行gdb,会发现只会到gef,到不了其他两个插件,想用的时候只能到.gdbinit里边注释掉其他两个,这样比较麻烦,简单写一个脚本来选择要使用的插件;

#!/bin/bash

function Mode_change {

name=$1

gdbinitfile=~/.gdbinit    #这个路径按照你的实际情况修改

# gdbinitfile=/root/Desktop/mode

peda="source ~/peda/peda.py"   #这个路径按照你的实际情况修改

gef="source /home/kali/.gdbinit-gef.py"   #这个路径按照你的实际情况修改

pwndbg="source /home/kali/pwndbg/gdbinit.py"   #这个路径按照你的实际情况修改

sign=$(cat $gdbinitfile | grep -n "#this place is controled by user's shell")

#此处上面的查找内容要和你自己的保持一致

pattern=":#this place is controled by user's shell"

number=${sign%$pattern}

location=$[number+2]

parameter_add=${location}i

parameter_del=${location}d

message="TEST"

if [ $name -eq "1" ];then

sed -i "$parameter_del" $gdbinitfile

sed -i "$parameter_add $peda" $gdbinitfile

echo -e "Please enjoy the peda!\n"

elif [ $name -eq "2" ];then

sed -i "$parameter_del" $gdbinitfile

sed -i "$parameter_add $gef" $gdbinitfile

echo -e "Please enjoy the gef!\n"

else

sed -i "$parameter_del" $gdbinitfile

sed -i "$parameter_add $pwndbg" $gdbinitfile

echo -e "Please enjoy the pwndbg!\n"

fi

}

echo -e "Please choose one mode of GDB?\n1.peda    2.gef    3.pwndbg"

read -p "Input your choice:" num

if [ $num -eq "1" ];then

Mode_change $num

elif [ $num -eq "2" ];then

Mode_change $num

elif [ $num -eq "3" ];then

Mode_change $num

else

echo -e "Error!\nPleasse input right number!"

fi

gdb $1 $2 $3 $4 $5 $6 $7 $8 $9

脚本执行效果如下:

 

其他

经过上面的安装部署,我们执行gdb来进行调试已经没有问题了;但是当我们需要用到gdbserver的时候会发现kali是没有带gdbserver的;比如当我们用pwntools来执行gdb的时候,会提示gdbserver is not installed

 

第一次连接,python会提示没有gdbserver的环境,kali环境下sudo apt-get install gdbserver,装一个就完事了;当然如果是嵌入式设备的话,需要对应的环境编译一个

环境准备好后,就可以开始用pwntools来执行本地的调试了。

【参考】:GDB插件控制_aptx4869_li的博客-CSDN博客

【参考】:介绍 | 100个gdb小技巧

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

jvm简介

.什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成。JVM屏蔽了与操作系统平台相…

Postman如何做接口测试,那些不得不知道的技巧

目录:导读 前言 Postman如何做接口测试1:如何导入 swagger 接口文档 Postman如何做接口测试2:如何切换测试环境 Postman如何做接口测试3:什么?postman 还可以做压力测试? Postman如何做接口测试4&…

电源控制测试老化系统-国产电源测试仪器-电源模块测试系统NSAT-8000

*测试仪器:可编程直流电源、可编程直流电子负载、数字示波器、功率计 *测试产品:电源模块。纳米软件电源ATE自动测试系统适用于大功率工业电源、AC/DC类DC电源供应器、适配器、充电器、LED电源等开关电源之综合性能测试。 *被测项目:有效值电…

快来组战队,赢iPhone啦!

常见问题 问:我邀请的人再去邀请,也算我的战队队员么?我最多可以有多少个队员? 答:您将和您直接邀请的人组成战队,并担任该战队的队长。如果被您邀请的小伙伴再去邀请其他人,那么您邀请的小伙…

跨域推荐(Cross-Domain Recommendation)的最新综述

论文解读系列第十六篇:IJCAI 2021--跨域推荐(Cross-Domain Recommendation)的最新综述 - 知乎 数据稀疏问题 目录 1.背景介绍 (1)内容层级相关性(content-level relevance) (2)用户层级相关性(user-level relevance) (3)产品层级相关性…

OpenCV从2到3的过渡

与版本2.4相比,OpenCV 3.0引入了许多新算法和功能。有些模块已被重写,有些已经重组。尽管2.4中的大多数算法仍然存在,但接口可能不同。本节描述了一般性的最显着变化,过渡操作的所有细节和示例都在本文档的下一部分中。 1、贡献存…

nginx安装与配置反向代理

Nginx (engine x) 是一款基于异步框架的轻量级/高性能的Web 服务器/反向代理服务器/缓存服务器/电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev(伊戈尔赛索耶夫)所开发.话不多说直接上步骤 1.安装nginx,我是在root用户下不需要加sudo yum install nginx 安…

嵌入式分享合集116

一、DC-DC升压电路模块原理 DC-DC 转换器是一种电力电子电路,可有效地将直流电从一个电压转换为另一个电压。 DC-DC 转换器在现代电子产品中扮演着不可或缺的角色。这是因为与线性稳压器相比,它们具有多项优势。尤其是线性稳压器会散发大量热量&#x…

什么是天气预报 API 接口?如何获取天气预报 API?

什么是天气预报API接口? 天气的好坏和人们的生活、工作息息相关,每天的天气如何?总是牵动着人们的心,关注天气就行了人们茶余饭后的话题了。如何获得准确的天气预报?还得从天气预报API接口说起。 天气预报API是提供未…

150398-22-4,三肽Phe-Arg-Arg

The tripeptide FRR was found to exert a Zn⁺ dependent, insulin-mimetic inhibitory action on myocardial proteolysis. 三肽FRR对心肌蛋白水解具有Zn⁺依赖性、胰岛素样抑制作用。 编号: 197811中文名称: 三肽Phe-Arg-Arg英文名: Phe-Arg-ArgCAS号: 150398-22-4单字母: H…

yolov1 论文精读 - You Only Look Once

YOLOv1 Introduction 作者将目标检测进行重构并看作为单一的回归问题,直接从图像到边界框坐标和类别概率。使用我们的系统,您只需要在图像上看一次(you only look once, YOLO),以预测出现的目标和位置。 系统将输入…

SpringMVC(九):作用域传参

文章目录 作用域传参 一、传统方式传递数据 二、使用Model传递数据

PHP反序列化与SESSION

php存储session的三种模式php_serialize&#xff08;php>5.5.4&#xff09; 经过serialize()函数序列化数组 php 键名竖线经过seralize()序列处理的值 php_biary 键名的长度对应ASCII字符键名serialize()序列化的值 测试代码 <?php //ini_set("sessi…

cubeIDE开发,在LCD显示摄像头抓取的图片数据

一、摄像头相关资料信息 在LCD上显示当前camera的图像数据&#xff0c;类似我们前面提到的LCD显示图片数据&#xff0c;就是实时将摄像头抓取的视频数据帧&#xff08;图片&#xff09;转换成图片字码表&#xff0c;即LCD宽*LCD高像素大小的颜色点阵&#xff0c;然后推送到LCD接…

(三) Spring Security Oauth2.0 源码分析--认证中心全流程分析

一 引言 Spring Security Oauth2.0 的认证中心可以简单的理解为是对Spring Security的加强,也是通过FilterChainProxy(其原理可参考前面的Security源码分析)对客户端进行校验后在达到自定义token颁发站点,进行token的颁发,具体流程如下: 用户发起token申请请求(‘/oauth/to…

ARM异常处理(4):SVC和PendSV的作用详解

SVC(Supervisor Call)和PendSV(Pendable Service Call)是针对软件和操作系统的两个异常。 1 SVC SVC用于生成系统函数调用&#xff0c;例如&#xff0c;用户程序不允许直接访问硬件&#xff0c;操作系统可以通过SVC提供对硬件的访问。因此&#xff0c;当用户程序想要使用某些…

STC 51单片机56——摇摇棒

主要代码&#xff1a; //增减图像时&#xff0c;需要修改 switch_show&#xff08;&#xff09;和 H对应参数 //所用单片机&#xff1a;STC15W408S 内部Rc 11.0592MHz #include <STC15.H> #include <intrins.h> #define POSITIVE 0 #define OPPOSE 1 //sbi…

Vector-常用CAN工具 - CANoe入门到精通_02

​咱们话接上回&#xff0c;前面已经介绍了CANoe的基本信息和硬件环境搭建&#xff0c;下面我们就要打开CANoe&#xff0c;配置CANoe工程了&#xff0c;只有完成了CANoe工程配置才能真正的使用CANoe完成测试&#xff0c;本次主要介绍的是手工测试环境&#xff0c;至于自动化测试…

[附源码]Python计算机毕业设计SSM教师职称评定系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【OpenCV学习】第5课:图像模糊(均值滤波,高斯滤波)

参考文章链接:https://blog.csdn.net/qq_30460949/article/details/121990114 仅自学做笔记用,后续有错误会更改 理论 1.Smooth/blur是图像处理中最简单和常用的操作之一 2.使用该操作的原因之一就是为了给图像预处理的时候减低噪声 3.使用Smooth/Blur操作其背后是数学的卷积…