首页 > 其他分享 >gdb的使用教程以及gdbpwndbg 常用命令

gdb的使用教程以及gdbpwndbg 常用命令

时间:2023-01-07 22:24:03浏览次数:60  
标签:break int t3st gdbpwndbg gdb 常用命令 cpp 断点

gdb的使用教程以及gdb/pwndbg 常用命令

1、基本使用(参考

#include <iostream>
using namespace std;
 
int func(int n){
    int sum=0;
    for(int i=0; i<n; i++){
        sum+=i;
    }
    return sum;
}
 
int main(){
    long sum2 = 0;
    for(int i=1; i<=100; i++){
        sum2 += i;
    }
    cout<<"1加到100 = "<<sum2<<endl;
    cout<<"1加到300 = "<<func(300)<<endl;
}

 

c++文件命名是t3st.cpp

编译生成执行文件:(g++参考

g++ -g t3st.cpp -o t3st

 

使用GDB调试:

gdb t3st

 

GDB调试命令:

(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。

1   #include <iostream>
2   using namespace std;
3    
4   int func(int n){
5       int sum=0;
6       for(int i=0; i<n; i++){
7           sum+=i;
8       }
9       return sum;
10  }

 


(gdb) <-------------------- 直接回车表示,重复上一次命令。

11   
12  int main(){
13      long sum2 = 0;
14      for(int i=1; i<=100; i++){
15          sum2 += i;
16      }
17      cout<<"1加到100 = "<<sum2<<endl;
18      cout<<"1加到300 = "<<func(300)<<endl;
19  }

 


(gdb) break 16 <---------------------------- 在16行出设置断点

Breakpoint 1 at 0x9b5: file t3st.cpp, line 16.

 

(gdb) break func <-------------------- 设置断点,在函数func()入口处。

Breakpoint 2 at 0x961: file t3st.cpp, line 5.

 

(gdb) info break <-------------------- 查看断点信息。

Num     Type           Disp Enb Address            What
1       breakpoint     keep y   0x00000000000009b5 in main() at t3st.cpp:16
2       breakpoint     keep y   0x0000000000000961 in func(int) at t3st.cpp:5

 

(gdb) r <--------------------- 运行程序,run命令简写

Starting program: /home/linux/Desktop/test1/t3st 

Breakpoint 1, main () at t3st.cpp:17
17        cout<<"1加到100 = "<<sum2<<endl;

 

(gdb) n <--------------------- 单条语句执行,next命令简写。

1加到100 = 5050
18        cout<<"1加到300 = "<<func(300)<<endl;

 

(gdb) c <--------------------- 继续运行程序,continue命令简写。

Continuing.

Breakpoint 2, func (n=300) at t3st.cpp:5
5        int sum=0;

 

(gdb) n <--------------------- 单条语句执行,next命令简写。

(gdb) n
6        for(int i=0; i<n; i++){
(gdb) n
7            sum+=i;
(gdb) n
6        for(int i=0; i<n; i++){
(gdb) n
7            sum+=i;
(gdb) n
6        for(int i=0; i<n; i++){
(gdb) n
7            sum+=i;

 

(gdb) p i <--------------------- 打印变量i的值,print命令简写。

$1 = 2

 

(gdb) p sum

$2 = 1

 

(gdb) bt <--------------------- 查看函数堆栈。

#0  func (n=300) at t3st.cpp:7
#1  0x0000555555554a0f in main () at t3st.cpp:18

 

(gdb) finish <--------------------- 退出函数。

Run till exit from #0  func (n=300) at t3st.cpp:7
0x0000555555554a0f in main () at t3st.cpp:18
18        cout<<"1加到300 = "<<func(300)<<endl;
Value returned is $3 = 44850

 

(gdb) c <--------------------- 继续运行。

1加到300 = 44850
[Inferior 1 (process 3398) exited normally]

 

(gdb) q <--------------------- 退出gdb。

2、gdb/pwndbg 常用命令简单整理

1、基本指令

help : 帮助

info(简写i) : 查看一些信息,只输入info可以看可以接什么参数,下面几个比较常用
    i b : 常用,info break 查看所有断点信息(编号、断点位置)
    i r : 常用,info registers 查看各个寄存器当前的值
    i f : info function 查看所有函数名,需保留符号
    
show : 和info类似,但是查看调试器的基本信息,如:
    show args : 查看参数

backtrace : 查看调用栈

quit(简写q): 退出,常用

 

2、执行指令

run : 简记为 r ,其作用是运行程序,当遇到断点后,程序会在断点处停止运行,等待用户输入下一步的命令

continue (简写c ): 继续执行,到下一个断点处(或运行结束)

next(简写 n): 单步跟踪程序,当遇到函数调用时,也不进入此函数体;此命令同 step 的主要区别是,step 遇到用户自定义的函数,将步进到函数中去运行,而 next 则直接调用函数,不会进入到函数体内。

step (简写s): 单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的

finish : 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。

quit : 简记为 q ,退出gdb

 

3、断点指令break(缩写b)

break n (简写b n):在第n行处设置断点

break +offset : 在当前行号的后面offset行停住

break -offset : 在当前行号的前面offset行停住

break func : 在函数func()的入口处设置断点

break file_name : 15 : 给file_name的15行下断点

break file_name:func : 在file_name文件的func函数打断点

break ... if cond : 设置条件断点,... 参数用于指定生成断点的具体位置;cond 参数用于代指某个表达式。

delete n : 删除第n个断点(如果不指定 n 参数,则 delete 命令会删除当前程序中存在的所有断点。)

disable n : 暂停第n个断点

enable n : 开启第n个断点

clear n : 删除指定位置处的所有断点

 

 

 

可以看下这篇文章

 

标签:break,int,t3st,gdbpwndbg,gdb,常用命令,cpp,断点
From: https://www.cnblogs.com/pengui-n3321/p/17033711.html

相关文章

  • Linux笔记03: Linux常用命令_3.4文件和目录共用命令
     3.4目录和文件共用命令 3.4.1rm命令  ●命令名称:rm。  ●英文原意:removefilesordirectories。   ●所在路径:/usr/bin/rm。   ●执行权限:所......
  • conda 常用命令, Non-zero exit code,You will need to adjust your conda configuratio
     报错:Youwillneedtoadjustyourcondaconfigurationtoproceed.Use​​​condaconfig--showchannels​​​toviewyourconfiguration'scurrentstate,and......
  • AnolisOS-8.6安装EM13C&Agent部署&EM常用命令&集群数据库添加
    系统:AnolisOS8.6数据库:Oracle19.16说明:此安装文档选择的是AdvancedInstallaioin,内存要求10G.安装EM前需了解相关参数要求.1、安装数据库1.1、去除虚拟嵌套虚拟机功能yum......
  • Dos常用命令!
    常用DOs#文件操作md目录名rd目录名cd>文件名del文件名#ping命令pingip​#打开应用calcmspaintnotepad​#查看ipipconfig#推出exit#清屏cls#切换目录cdcd/d#查看......
  • Kubernetes(k8s) kubectl api-versions常用命令
    kubectl在$HOME/.kube目录中查找一个名为config的配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数来指定其它kubeconfig文件。本文主要介绍K......
  • docker常用命令
    查看镜像dockerimages运行一个镜像dockerrun-p8080:80-dnginx查看正在运行的镜像dockerps停止一个容器的运行(817689e03b44为容器id)dockerstop817......
  • PostgreSQL(02): PostgreSQL常用命令
    目录PostgreSQL(01):Ubuntu20.04/22.04PostgreSQL安装配置记录PostgreSQL(02):PostgreSQL常用命令PostgreSQL常用命令满足验证条件的用户,可以用psql命令进入p......
  • docker提交容器成一个新的镜像commit和push,以及docker常用命令
    docker自己提交配置好的容器,然后生成一个新的镜像,以后启动就以配置好的镜像作为模板启动代码如下:dockercommit-a"author"-m"commitmessage"容器idnamespace/name:t......
  • Docker常用命令
    Docker的常用命令帮助命令dockerversion #显示docker的版本信息dockerinfo   #显示docker的系统信息,包括镜像和容器的数量docker --help #万能命令帮助......
  • gdb 几个不错的gui 工具
    使用gdb我们可以方便的进行软件调整,以下是几个不错的gui工具,可以方便调试,共享gdb-frontendui还是很不错的,同时包含了一个web体验的,值得看看gdbgui这个支持的比较多......