linux入门基?。ㄋ模〨db调试程序Gdb调试
注意:在Gcc编译选项中一定要加入
–g
退出GDB:quit
或
Ctrl d
调试过程:
1.
查看文件
命令:
(gdb)
l
命令:(gdb)
b
行号
注:到第17行停止 , 并没有执行17行
3.
查看断点情况
info
b
4.
运行代码
r
命令:
(gdb)
r
(也可以指定行开始运行,在r后面加上行号)
5.
查看变量值
p
命令:(gdb)
p
变量名
6.
设置监视点:
watch
z
(变量名)
也可以是复杂的表达式
7.
单步运行
命令:(gdb)
n
(逐过程)
8.逐步 , 会进入函数
命令:(gdb)
s
9.条件断点
将正常断点转变为条件断点:condition
如:condition
1
i
==
10
只有当满足条件i
==
1时 , 才会在断点1处暂停
10.
恢复程序运行
c
命令:
(gdb)
c
(程序就会运行,如果没有断点,就运行剩下部分,如果有断点 , 就会运行到下一个断点)
11.
去除断点
clear
line_number
clear
filename:line_number
12.
help
12.1
help找出类别
12.2help从列表中
[Linux]gdb查看内存区命令GNU调试器(GNU Debugger, GDB)是一个开源的源代码级的调试工具,其性能优良、功能齐全、易于使用,在嵌入式系统开发过程中扮演着越来越重要的角色 。接下来是我为大家收集的[Linux]gdb查看内存区命令,希望能帮到大家 。
[Linux]gdb查看内存区命令
用gdb查看内存
格式: x /nfu
说明
x 是 examine 的缩写
n表示要显示的内存单元的个数
f表示显示方式, 可取如下值
x 按十六进制格式显示变量 。
d 按十进制格式显示变量 。
u 按十进制格式显示无符号整型 。
o 按八进制格式显示变量 。
t 按二进制格式显示变量 。
a 按十六进制格式显示变量 。
i 指令地址格式
c 按字符格式显示变量 。
f 按浮点数格式显示变量 。
u表示一个地址单元的长度
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节
Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),
t(binary), f(float), a(address), i(instruction), c(char) and s(string).
Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes)
举例
x/3uh buf
表示从内存地址buf读取内容,
h表示以双字节为一个单位,
3表示三个单位,
u表示按十六进制显示
例子:
n是个局部变量
Breakpoint 1, main (argc=1, argv=0xbffff3a4) at calc.c:7
7 int n = atoi(argv[1]);
(gdb) print n
$1 = (int *) 0xbffff2ec
(gdb) x 0xbffff2ec
0xbffff2ec: 0x00282ff4
(gdb) print * (int *) 0xbffff2ec
$2 = 2633716
(gdb) x /4xw 0xbffff2ec
0xbffff2ec: 0x00282ff4 0x080484e0 0x00000000 0xbffff378
(gdb) x /4dw 0xbffff2ec
0xbffff2ec: 2633716 134513888 0 -1073745032
(gdb)
看了“[Linux]gdb查看内存区命令”还想看:
1. Linux使用dmidecode命令查看内存型号
2. Linux下查看CPU型号,内存大小,硬盘空间命令
3. 如何在Linux命令行中查看目录的大小
4. LINUX 查看硬件配置命令的教程
[转载] 从正在运行的Linux进程中dump出内存内容最近看到有个CTF题感觉挺有意思 , 就是从一个bin中找到一个secret key,然后用来签名session cookies用来怼一个使用go的Web服务器 。通常这种类型题的flag都比较直接 。可以直接用strings怼这个bin就可以了,然而这次的这个题目中的bin不同,因为有太多杂碎(noise)要过滤了 。于是在此我就来展示一下如何用一些基本的Linux命令配合gdb从进程中dump出内存中的信息 。
先file一下,
发现是64位的Linux可执行文件 。
然后strings一下 ,
发现字符串太多,还是先不看,再研究深一点吧 。
然后先运行一下程序 ,
然后再另一个终端找到这个进程的PID
然后cat一下它的内存(太长不看TL;DR)
似乎太多了有点可怕,但是不用害怕 。
然后启动gdb,将改进程attach到gdb上 。
然后就是gdb命令
解释一下语法:
然后就是用strings命令找出刚才dump出的文件的字符串,我喜欢最少10个长度的字符串(-n 10)来过滤掉一些无用的信息(noise) 。
结果如下:
可以看到好像有个hash值,为了不泄露CTF题的答案,我已经把hash值改了 。
总结
好了 , 你已经找到运行的进程的PID,dump出了那个进程的内存内容,然后用gdb , strings命令找出了有用的数据 。
以上翻译自:
Let’s get your hands dirty
Down to business
于是我也想试一下?。欢蚁胝乙桓鲋葱忻钪蟛煌顺龅慕袒孤训? ,最终我想到了apache , 然而必须要有客户端与apache建立TCP长连接,如果是那种5xx的错误,比如这个,
就会发现TCP连接建立之后马上又断开了 。
于是只能弄一个TCP长连接吧 。返回200的那种应该可以 。
结果发现还是不行 。
于是通过htop漫无目的地找吧 , 于是还是找apache的主进程吧 。
通过htop发信apache的主进程的PID为6900,
于是
(注意:要以root的身份启动,否则可能没有权限 。)
然后gdb就开始调试6900进程了,一顿输出啊,几秒之后到达gdb的命令行 。
然后dump出heap中的内容 。
然后在/root目录找到了那两个dump出来的文件 ,
从任意一个dump中找出10个字符以上的字符串吧 。
————————————————
原文链接:
Linux内核调试工具KGDB?内核工具KGDB调试环境需要为Linux 内核加上 kgdb补丁linux中的gdb命令,补丁实现GDB远程调试所需要的功能linux中的gdb命令,包括命令处理、陷阱处理及串口通信3个主要的部分 。KGDB补丁的主要作用是在Linux 内核中添加linux中的gdb命令了一个调试Stub 。调试Stub是Linux 内核中的一小段代码,是运行GDB的开发机和所调试内核之间的一个媒介 。GDB和调试stub之间通过GDB串行协议进行通信 。GDB串行协议是-种基于消息的ASCII 码协议,包含了各种调试命令 。当设置断点时,KGDB将断点的指令替换为一条 trap指令,当执行到断点时控制权就转移到调试 stub中去 。此时,调试stub 的任务就是使用远程串行通信协议将当前环境传送给GDB,然后从GDB处接收命令 。GDB命令告诉stub 下一步该做什么 , 当stub收到继续执行的命令时,将恢复程序的运行环境,把对 CPU的控制权重新交还给内核 。KGDB补丁给内核添加以下3个部件linux中的gdb命令:
(1 ) GDB stub
GDB stub被称为调试插桩(简称为stub),是KGDB调试器的核心 。它是Linux内核中的一小段代码,用来处理主机上: GDB发来的各种请求;并且在内核处于被调试状态时,控制目标机板上的处理器 。
(2)修改异常处理函数
当这个异常发生时,内核将控制权交给KGDB调试器,程序进入KGDB提供的异常处理函数中 。在里面,可以分析程序的各种情况 。
(3)串口通信
GDB和 stub之间通过GDB串行协议进行通信 。它是一种基于消息的ASCII 码协议,包含了各种调试命令 。除串口外,也可以使用网卡进行通信 。以设置内核断点为例说明KGDB与GDB之间的工作过程 。设置断点时,KGDB修改内核代码,将断点位置的指令替换成一条异常指令(在ARM中这是一条未定义的指令) 。当执行到断点时发生异常,控制权转移到stub 的异常处理函数中 。此时,stub的任务就是使用GDB串行通信协议将当前环境传送给GDB,然后从GDB处接收命令,GDB命令告诉stub下一步该做什么 。当stub收到继续执行的命令时,将恢复原来替换的指令、恢复程序的运行环境,把对CPU的控制权重新交还给内核 。
linux gdb基础命令你的gdb压根就没有解析出来断点,你的库有问题 。你run后bt一下就可以进入断点的
你把代码发我吧,给你调试
linux下的gdb是个命令,但在linux常用命令列表中找不到?首先linux中的gdb命令,一般的命令其实也都是程序
装在系统路径下的程序的程序名linux中的gdb命令,都可以作为命令直接调用
具体哪些路径是“系统路径”linux中的gdb命令,Linux下可以用$PATH$命令来查看(通常会有多个路径,用冒号隔开)
而gdb其实是gcc/g编译器的一个附带的调试器
虽然现在主流的Linux发行版中都会自带gcc编译器,当然也会附带这个gdb的调试器
但毕竟它不算是Linux系统的内部组件 , 所以自然也不能算做Linux的自带命令了
【linux中的gdb命令 linux gdb命令】linux中的gdb命令的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于linux gdb命令、linux中的gdb命令的信息别忘了在本站进行查找喔 。
推荐阅读
- 新手电脑怎么加固态硬盘,电脑新加一块固态硬盘怎么设置
- C语言怎样输出数组中的负数,c语言怎么输出数组的值
- sqlserver慢sql语句,sql执行太慢
- vb.net单精度浮点 vb浮点数定义
- 电脑上用什么视频播放器,电脑上什么视频播放器最好用
- 韩国模拟跳江游戏,韩国模拟跳江游戏有哪些
- 更新苹果ios15.3好卡,ios15更新后卡顿
- linuxarp命令 linux arpspoof
- 闲鱼图片flutter,闲鱼图片水印在哪设置