Pwn:gdb基础篇
第二篇来了,就如第一篇所说,这篇文章会介绍gdb基础的使用方法,因为昨天服务器被ddos了,今天才修好,先对更新慢道一句抱歉,那么废话不多说,直接开始介绍我们今天的主角——gdb。
gdb是一个很强大的动态调试工具,在命令行里操作,也许不如VC那样的IDE图形调试界面那么好上手,但是这款工具熟练之后非常强大,在pwn中也发挥着很重要的作用,一般来说,gdb能完成以下的四个功能:
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
断点:是指程序运行到某个地方或者达到某个条件就暂停运行的一个标记
IDE:是指图形操作界面
VC:一个拥有IDE的动态调试程序
寄存器:就是系统储存各种值的部件,关于寄存器以及汇编,将会在下一篇文章详细介绍
(这里可能有点繁琐,因为作者想让更多的人能够理解,所以希望大佬们原谅我写的这么繁琐)
接下来上我们本次要进行演示的程序源码:
#include <stdio.h> void debug(char *str) { printf("debug info :%s\n",str ); } main(int argc,char *argv[]) { int i,j; j=0; for(i=0;i<10;i++){ j+=5; printf("now a=%d\n", j); } }
这个程序十分简单,就是简单的写了一个输出的函数,主函数里也就简单写了个循环,接下来让我们开始使用gdb分析这个程序
gdb test(或者gdb之后file test)
注意,编译时要加上-g参数,否则就会出现错误
gcc test.c -g -o test gdb test
成功启动
gdb基本使用操作
显示源码函数list(简写为l)
list n 列出以n为中心的十行源代码(默认为从第一行开始,一次显示十行代码)
list 函数名是显示以该函数为中心的十行代码
list - 显示刚刚显示源代码之前的源代码
断点函数break(简写b)
break 地址或函数名或数字 在地址或函数处或第几行设置断点,程序运行到断点时会暂停运行方便分析
run运行(简写为r)
程序成功在13行断住
continue(简写为c):继续运行
因为这里是写了一个for循环,所以13行会被反复执行,也会被反复断住
注意:continue是继续运行直到下一个断点,如果使用run则会提示是否从程序开头开始运行
delete 断点编号:删除断点
成功删除,程序不会再次被截断
断点编号即breakpoints后面的数字
display命令(查看参数的值)
首先我们设置断点并运行
成功在第十行断住,display命令查看
接下来继续运行
可以看到程序追踪这两个值,直接输入delete删除所有断点
程序正常退出
step以及next命令
step和next是指让程序逐行运行,方便查看变量的值变化是否符合要求
同样是先设置断点并运行
这里可以看到上次display的参数还在运行,使用delete display删掉并重新运行
这里成功断住了,接下来单步执行
这里说下如何查看各寄存器的值,info registers
关于寄存器的详细信息,将会在下一篇文章介绍
为了使效果明显,我们查看j的值
可以看到j的值发生变化,next作用相同
step n或者next n表示连续执行接下来几行代码
(step缩写为s)
watch命令
watch命令用于设置观察点,当被观察的表达式或变量的值变化时程序停止运行
还是先设置断点并运行
接下来设置观察点j并删除断点1,运行程序
这里可以看到当j的值变化时程序自动暂停并且观察点自动销毁
继续运行程序,正常退出
好了,这篇gdb基础文章就到这里,如果有什么不足还请大家指出,下一篇我将会写关于寄存器也就是汇编基础,让大家理解更透彻,谢谢你的观看和支持
本文链接:http://www.my-index.cn/?id=21
版权声明:转载请注明转自“my-index.cn”
上一篇:感悟
下一篇:网站的架构以及相关的名称释义
发表评论
还没有评论,快来说点什么吧~