• gdb 常用命令总结


    安装插件

    1. 安装GDB增强工具 (gef)
      * wget -q -O- https://github.com/hugsy/gef/raw/master/scripts/gef.sh | sh
    2. GDB安装插件(在root权限安装,用户权限使用不了需要在用户权限下安装)
      git clone https://github.com/gatieme/GdbPlugins.git ~/GdbPlugins  (安装gdb的Python脚本插件)
      echo "source ~/GdbPlugins/peda/peda.py" > ~/.gdbinit    (默认打开gdb插件是pada)  倾向于破解和逆向
      echo "source ~/GdbPlugins/gef/gef.py" > ~/.gdbinit      倾向于debug 逆向
      echo "source ~/GdbPlugins/gdbinit/gdbinit" > ~/.gdbinit    个人定制
    3.Linux程序发布流程
      * 确定程序是否存在符号表
        readelf -s test-1
      * 生成符号表
        objcopy --only-keep-debug test-1 test-1.symbol
      * 生成发布程序
        objcopy --strip-debug test-1 test-release
      * 使用符号表进行程序debug
        gdb -q --symbol=test-1.symbol --exec=test-release

    gdb 语法的使用
    gcc -g -o main main.c
    gdb main
    分别在父进程和子进程的位置设置好断点(b 18), 然后r运行程序即可断下来:
    所有命令,只要不出现冲突,都可以进行简写,如list可直接简写为l,break可直接简写为b。

    list 行号/函数名 查看指定位置的源码
    info break|watch|... 显示断点信息,watch 信息

    break 行号/函数名 设置断点
    tbreak/tb 临时断点(断点只生效一次)
    del/clear 删除断点
    ingore (ignore N COUNT)忽略断点N次数为COUNT,即前COUNT次断点不触发

    start 运行(自动在main函数处停下)
    run 运行程序
    next 单步运行,不进入函数内部
    step 单步运行,进入函数内部
    ni 下一条指令
    si 进入函数(汇编级)
    continue 继续运行,直到结束或者断点
    n 10 运行10行代码
    ni 10 运行10条指令
    until 退出循环
    finish 退出函数(相当于是快进)
    return 退出函数(它是强制退出,跳过了中间的指令)
    call 调用函数

    watch 变量|表达式 观察变量或表达式,若其改变则停止
    print 变量|表达式 查看程序运行时对应的变量或表达式的值
    set 变量=新值 设置变量在内存中的当前值
    backtrace/bt 若程序宕掉,查看函数调用栈
    display 自动打印变量(每次程序暂停,都自动打印)
    x 参数为内存地址,打印内存(help x查看用法)
    info reg all 打印所有寄存器

    条件断点:比如 b foo if a==1 ,条件成立是触发断点
    执行shell命令(在命令前输入shell即可,比如shell clear就相当于是执行了shell中的clear命令,清屏)

    多进程调试
    设置follow-fork-mode (parent/child)和detach-on-fork (on/off)的值来调试子程序
    follow-fork-mode detach-on-fork
      parent on 只调试主进程(GDB默认)
      child on 只调试子进程
      parent off 同时调试两个进程, gdb跟主进程, 子进程block在fork位置
      child off 同时调试两个进程,gdb跟子进程,主进程block在fork位置

    set follow-fork-mode child
    set detach-on-fork off
    show follow-fork-mode/detach-on-fork

    进程间切换
    gdb会为inferiors分配ID, 其中带有*的进程是正在调试的inferior;gdb将每一个被调试程序的执行状态记录在一个名为inferior的结构中;
    info inferiors 查看当前此时显示gdb调试的所有inferior
    inferior ID切换到对应id的断点进程

    多线程调试
    gcc -g -o thread -lpthread thread.c
    info threads 来查看有多少个线程
    thread threadID 切换调试的线程
    show non-stop 查看线程调试时运行的模式
    show scheduler-locking
    set scheduler-locking on|off|step
      on 锁定其他线程,只有当前线程执行
      off 不锁定任何线程
      step 只有被调试线程运行
    thread apply threadID gdbCmd 指定某线程执行某gdb命令
    thread apply all gdbCmd 全部的线程执行某gdb命令

    程序静态/动态分析工具
    IDA Pro/ winhex pedit binwalk(识别压缩壳,解压等)
    readelf c++filter
    OllyDebug
    gdb

    gdb插件调试的常用命令
    peda
    aslr on|off
    aslr
    dumprop
    elfheader
    elfsysmbol
    dumpargs

    checksec
      canary 栈保护 加入cookie
      NX 栈不可执行
      PIE(alsr) 每次执行内存地址随机化
      Fortify 栈参数保护检测
      relro GOT只读


    参考:

    汇编:https://blog.csdn.net/weixin_51325053/article/details/117511668
    https://www.136.la/mysql/show-44335.html
    https://blog.csdn.net/qq_29809823/article/details/118941735
    多线程: https://blog.csdn.net/weixin_42158742/article/details/113100151
    多进程: https://blog.csdn.net/qq_40827990/article/details/110423679

  • 相关阅读:
    %u编码
    总结
    windows7 安装PHP7 本地网站搭建
    统计某个端口的链接数
    mysql连结查询
    mysql in
    读书笔记<白帽子讲web安全>
    Web攻防系列教程之文件上传攻防解析(转载)
    攻防:文件上传漏洞的攻击与防御
    weblogic检查项
  • 原文地址:https://www.cnblogs.com/sanmubai/p/16247729.html
Copyright © 2020-2023  润新知