gdb入门

GDB

0x10 什么是GDB

GDB是GNU程序的一个debugger, 允许查看其他程序运行时内部的情况,或者当一个程序崩溃时的运行情况

0x11特性
  • 程序开始后, 指定可能影响程序行为的任何操作
  • 让程序在特定的条件下停止
  • 当程序停止后,检查发生了什么
  • 在程序中做一些操作, 比如试着修复一个bug或者尝试找到更多的问题
0x20 GDB支持哪些语言
  • Ada
  • Assembly
  • C
  • C++
  • D
  • Fortran
  • Go
  • Objective-C
  • OpenCL
  • Modula-2
  • Pascal
  • Rust
0x30 GDB使用

测试代码demo.c

#include<stdio.h>
#include<malloc.h>
#include<unistd.h>
#include<string.h>
int main(){
        int size = 0x70;
        void *p = malloc(size);
        void *q = malloc(size);
        void *junk = malloc(size);
        sleep(0);
        free(q);
        sleep(0);
        printf("%p\n",q);
        int *r = malloc(0x60);
        printf("%p\n",r);
        sleep(0);
        return 0;
}

编译命令:-o 输出文件 -g 调试模式

gcc -o demo -g demo.c

  • 进入gdb命令

    gdb demo

    github

  • 查看源代码

    list or l

    github

  • 运行此程序

    run[arg] or r: 可以指定程序执行的参数

    github

  • 断点(在程序执行期间暂停,用以调试程序)

    break[function name] or b:如下图 对sleep 进行打断点

    break[line number] or b:break也可以对行数进行断点

    break[if condition] 也可以break 一个判断条件

    github

  • 程序继续执行

    continue [repeat count] or c:如下图 执行continue 程序会继续执行,直到下一个break断点

    github

  • 程序单步步过

    next or n:该指令会帮助程序在遇到断点后继续执行

    github

  • 程序单步进入

    step or s:如果遇到函数,程序会进入到函数此函数中

  • 查看堆信息

    heap :下图是执行第一个break后 heap的情况,我们malloc了3个0x70大小的chunk,根据libc源码所写,malloc一个0x70的堆块,会占用0x80的大小,所以会有0x602000、0x602080、 0x602100三个堆块,最后一个堆块是top chunk

    github

  • 查看内存

    x/<n/f/u> <addr>

    • n 是一个整数 表示显示内存的长度
    • f 表示显示的格式
      • x (hex) 按照十六进制格式显示
      • d (decimal) 按照十进制格式显示
      • u (unsigned)按照十六进制显示无符号整形
      • o (octal) 按照八进制格式显示
      • t (binary)按照二进制格式显示
      • a (address) 按照十六进制格式显示
      • c (char) 按照字符格式显示
      • f (float) 按照浮点数格式显示
      • i 按照指令地址格式显示
    • u 表示将多少个字节作为一个值取出来,GDB默认4个bytes
      • b 表示单字节
      • h 表示双字节
      • w 表示四字节
      • g 表示八字节

    github

  • 查看栈信息

    stack

    github

  • 查看bin链

    bins 如下图 当程序运行到第二个sleep时,q被free掉 0x70大小的堆块会直接进入fastbin中, 使用bins命令可以查看当前bin链情况

    github

    github

  • 退出gdb

    quit or q

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值