使用GDB和GEF进行调试

使用GDB进行调试

这是编译ARM二进制文件和使用GDB进行基本调试的简单介绍。在您按照教程进行操作时,您可能需要按照自己的习惯使用ARM程序集。在这种情况下,你要么需要一个备用的ARM设备,或者你只是按照在这短短的步骤建立自己的实验室环境中虚拟机操作方法

您可以使用第7部分 - 堆栈和函数中的以下代码来熟悉GDB的基本调试。

.section .text
.global _start

_开始:
    按{r11,lr} / *开始序幕。将帧指针和LR保存到堆栈* /
    添加r11,sp,#0 / *设置堆栈框架的底部* /
    sub sp,sp,#16 / *序幕结束。在堆栈上分配一些缓冲区* /
    mov r0,#1 / *设置局部变量(a = 1)。这也可以作为设置最大功能的第一个参数* /
    mov r1,#2 / *设置局部变量(b = 2)。这也可以作为设置最大功能的第二个参数* /
    bl最大/ *呼叫/分支功能最大* /
    sub sp,r11,#0 / *结尾的开始。重新调整堆栈指针* /
    流行{r11,pc} / *结语结尾。从堆栈中恢复帧指针,通过直接加载到PC,跳转到先前保存的LR * /

最大:
    按{r11} / *开始序幕。将帧指针保存到堆栈* /
    添加r11,sp,#0 / *设置堆栈框架的底部* /
    sub sp,sp,#12 / *序幕结束。在堆栈上分配一些缓冲区* /
    cmp r0,r1 / *执行if(a <b)* /
    movlt r0,r1 / *如果r0小于r1,将r1存入r0 * /
    添加sp,r11,#0 / *结尾的开始。重新调整堆栈指针* /
    弹出{r11} / *恢复帧指针* /
    bx lr / *结语结尾。通过LR寄存器跳回主站* /

就个人而言,我更喜欢使用GEF作为GDB扩展。它给了我一个更好的概述和有用的功能。您可以在这里试用:GEF -  GDB增强功能

将上面的代码保存在一个名为max.s的文件中,并使用以下命令进行编译:

$ as max.s -o max.o
$ ld max.o -o max

调试器是一个强大的工具,可以:

  • 崩溃后加载内存转储(验尸调试)
  • 附加到正在运行的进程(用于服务器进程)
  • 启动一个程序并进行调试

针对二进制文件,核心文件或进程ID启动GDB:

  • 附加到进程:$ gdb -pid $(pidof <process>)
  • 调试一个二进制文件:$ gdb ./file
  • 检查核心(崩溃)文件:$ gdb -c ./core.3243
$ gdb max

如果您安装了GEF,则会释放您的gef>提示符。

这是你如何获得帮助:

  • (gdb)h
  • (gdb࿰
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值