个人感觉从windows平台转到linux平台一个不适应的地方就是调试器的使用。因为windows下调试器基本上都依赖快捷键和图像界面来完成操作,就算是windbg这种伪命令行的工具,命令也很简单比较好记。

相比之下GDB属于很复杂的了,网上找到的一些GDB的文章列出的往往都是一些没什么卵用的命令,所以开个帖子记录下常用的命令。

插件安装

1.gdb-peda

这是一个调试时必不可少的神器,github地址在:https://github.com/longld/peda ,它的安装两条简单命令即可完成:

1.git clone https://github.com/longld/peda.git ~/peda

2.echo "source ~/peda/peda.py" >> ~/.gdbinit

peda的一个实用命令checksec检测安全保护。

peda的另一个实用命令searchmem用搜索内存

file 路径  附加文件

r       开始执行

c              继续执行

step          单步步入

next          单步步过

b *地址  下断点

enable       激活断点

disable      禁用断点

info b        查看断点

del num     删除断点

x/wx $esp   以4字节16进制显示栈中内容

stack 100    插件提供的,显示栈中100项

find xxx     快速查找,很实用

s 按字符串输出

x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。

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

n、f、u是可选的参数。

b表示单字节,h表示双字节,w表示四字 节,g表示八字节

但是实际的组合就那么几种:

x/s 地址  查看字符串

x/wx 地址  查看DWORD

x/c 地址  单字节查看

x/16x $esp+12 查看寄存器偏移

set args 可指定运行时参数。(如:set args 10 20 30 40 50) 
show args 命令可以查看设置好的运行参数。 

如上所示,这是peda的栈视图。其中红色的是栈帧的返回地址,蓝色的表示这个值可能为指针。、

针对peda的使用我已经单独开了一篇文章来写:http://www.cnblogs.com/Ox9A82/p/5729308.html

GDB调试实用命令的更多相关文章

  1. gdb调试常用命令

    gdb 调试常用命令 gcc -g mian.c -o main.out -o (定制生成的可执行文件的名称,缺省时为a.out) -g 使gdb可调试,在编译的时候,产生调试信息 gdb main. ...

  2. 使用 GDB 调试需要命令行参数的程序

    使用 gdb 命令提供的 --args 选项可以调试需要命令行参数的程序,如下: gdb --args a.out arg1 arg2 arg3

  3. GDB 调试 一些命令

    1. gdb查看指定地址的内存地址的值:examine 简写 x-----使用gdb> help x 来查看使用方式     x/ (n,f,u为可选参数)n: 需要显示的内存单元个数,也就是从 ...

  4. gdb调试用命令与一般调试方法

    示例代码 1 #include <iostream> 2 using namespace std; 3 4 void Print() 5 { 6 cout<<"hel ...

  5. adb调试实用命令

    获取设备IMEI: adb shell dumpsys iphonesubinfo 文件在设备和PC端的操作:adb push [PC端源文件路径] [设备的目的文件路径] 例如:adb push C ...

  6. 使用gdb调试多线程程序总结

    转:使用gdb调试多线程程序总结 一直对GDB多线程调试接触不多,最近因为工作有了一些接触,简单作点记录吧. 先介绍一下GDB多线程调试的基本命令. info threads 显示当前可调试的所有线程 ...

  7. gdb调试(一)

    对于gdb是什么,这里就不多说了,只要是程序员一般都听说过,像java开发会用到集成开发工具eclipse,里面调试起来非常方便,全是可视化的,但是如果在linux下编写的c程序,用可视化的调试就没这 ...

  8. gdb调试常用实用命令和core dump文件的生成

      1.生成core dump文件的方法: $  ulimit -c //查看是否为0 如果为0 $   ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxx ...

  9. gdb调试常用实用命令和core dump文件的生成(转)

    1.生成core dump文件的方法: $  ulimit -c //查看是否为0 如果为0 $   ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxxx的 ...

随机推荐

  1. Java考试题

    1.     public class GC { 2.     private Object o; 3.     private voiddoSomethingElse(Object obj) { o ...

  2. 【2016北京集训】Mushroom

    Portal --> broken qwq Description 一开始有个蘑菇,蘑菇里面有\(n\)个房间,是一棵有根树,\(1\)号是根,每个房间里面都有杂草,现在要支持以下操作:将某个指 ...

  3. php的错误处理机制

    看tp5源码的,补充下 error_reporting(E_ALL); set_error_handler([__CLASS__, 'appError']); set_exception_handle ...

  4. jvm容器的关系

    jvm实例,tomcat容器,spring容器,在内存中的关系5 1.一个java项目对应一个jvm 吗? 2.tomcat里面加载多个java项目 ,是不是用了一个jvm? 3.java项目中的sp ...

  5. js 生成二维码

    $(".good_info").on('click',function () { var id = $(this).data('id'); var string = 'http:/ ...

  6. 「Django」与mysql8连接的若干问题

    1.setting配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #数据库驱动名 'NAME': 'my_tes ...

  7. 一元回归_R相关系数_多重检验

     sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  8. TCP与UDP区别详解

    TCP协议与UDP协议的区别    首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...

  9. C语言 两个小知识点

    strlen 函数原型 extern unsigned int strlen(char *s); 在Visual C++ 6.0中,原型为size_t strlen(const char *strin ...

  10. ItemCF_基于物品的协同过滤

    ItemCF_基于物品的协同过滤 1.    概念 2.    原理 如何给用户推荐? 给用户推荐他没有买过的物品--103 3.    java代码实现思路 数据集: 第一步:构建物品的同现矩阵 第 ...