GDB的使用技巧

GDB的调试技巧太多了,完全可以单独出一本书的,这篇文章仅仅是介绍自己这几天在做CS:APP上的二进制炸弹这道实验题所获得的一点点收获,权作以后备忘。

一.首先生成调试版本的可执行文件,然后gdb ./bomb即可。

二.设置断点

 使用命令b 函数名或行号都可以。如b main。然后enter 命令run执行到断点处。info breakpoint查看断点信息。

三.掌握单步调试 step 和next命令。

   step命令可以进入子函数内部,next则不进入函数内部,仅执行一个表达式的计算。

四.查看寄存器和内存的值

即使用打印命令print,比如查看寄存器eax的值,print /x $eax,查看内存的值,  print /x  *(int*)(0xbffff2e8),同理这个东西可以查看栈帧的值。x命令可以用来查看指针的指向的内存内存。如x /10x 0xbffff2e8。

五.修改寄存器和内存的值

使用set命令,如修改eax值为0x5,即 set $eax=0x65,修改内存则为set   *(char*)(0x804a890)='B'。当然set命令还可以设置一些东西,比如单步调试模式 set step-mode on和反汇编模式  set disassemble-next-line on,在我反汇编bomb文件,并gdb时,就设置这两项。

六.栈信息

函数调用时要入栈,函数返回时要出栈,所以查看栈的信息也非常有用。bt(backrace)命令可以查看栈帧(stack frame)值,使用help stack 可以看到一下信息,自己按下面操作即可。

backtrace -- Print backtrace of all stack frames
bt -- Print backtrace of all stack frames
down -- Select and print stack frame called by this one
frame -- Select and print a stack frame
return -- Make selected stack frame return to its caller
select-frame -- Select a stack frame without printing anything
up -- Select and print stack frame that called this one。

最后,还是想讲一下二进制炸弹的调试,这个实验对你上面的实践有很大的帮助,而且比较有趣。这个实验能帮助深刻理解程序的调用和返回,参数的传入,和函数的返回值。具体细节这里不讨论,我是花了十几个小时才通全关,还是觉得要自己亲自实践才能更深入理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值