第2砍 - 临阵磨枪

中秋月圆人团圆 烤肉越吃脸越圆

中秋节快乐 / 我想吃烤肉

前一章提到了环境的安装或自行编译与设定gdb

但如果不知道调试技巧 後续遇到问题也只剩愣在电脑前面

於是

今天就来谈谈我自己常用的gdb指令

当然 gdb 内有help指令告诉你有哪些可用的指令

  1. 首先如果有执行档没拔symbol的话 可以在一开始就载入後续可以直接trace C code.
file xxx.elf
  1. 因为後续会使用qemu模拟, 所以我们会利用远程调试来解决bug
target remote [target]:[port]


这时我们就可以知道我们接上target的程序了

  1. 接着如果单使用这个视窗很难知道我们接下来的指令会是什麽 所以我们把asm的视窗叫出来
layout asm

这时我们就知道这几行的指令是什麽
xzr为zero register, 特殊寄存器的一种, 目的也是为了清空资料
经过阅读过後就可以知道x1,x2,x3的寄存器都被清空後, 把0x20的资料载进x4里面, 接着进行跳转

当然在这里如果已经开始困惑, 可以先尝试阅读arm的官方文件, 内部都有表明不同的架构底下有哪些寄存器.

  1. 再来因为我们的main是用C写的, 并且编译完成後并没有拔掉symbol, 所以在这里可以利用src的视窗看到source code
layout src

这边就可以看到目前正进入一个while loop, 并且尝试抓取一个char

  1. 当然一些基本的操作
si # 单步执行(会进入function)
ni # 单步执行(直接执行完function跳出)
c  # continue, 如果设定好中断点 直接c下去可以直接撞到你要的点
x/10i $address # 查看 address 的位置往下10个instruction. (此指令有非常多用法, 族繁不及备载)
fin # 直接跳开目前的function回到上一层

那gdb真的非常好用, 网上还有很多大神释出的加强套件, 可以斟酌使用.
如果习惯视窗化的像是x64-debugger可能就要稍微熟悉指令的部分

[参考连结]
https://www.cs.cmu.edu/~gilpin/tutorial/


<<:  FUNCTION

>>:  【从实作学习ASP.NET Core】Day06 | 看懂 CRUD 的 Actions

Day 26 Wireless Attacks - 无线攻击 (aircrack-ng)

前言 终於进入新的篇章06-Wireless Attacks,但由於先前的Kali虚拟机环境无法进行...

[Day26] Click and Drag to Scroll

[Day26] Click and Drag to Scroll 需要用到的技巧与练习目标 mous...

30天打造品牌特色电商网站 Day.11 CSS框架-Bootstrap5

昨天已经初步介绍几个简单常用的bootstrap语法, 今天来看看几个也是好用、比较详细或特殊的情况...

STM32F746入手与初体验

参加这铁人赛的用意就是为了这个开发版STM32F746, 有开发版可以拿,这麽好康的事情,怎麽可以不...

实战练习 - 使用 RxJS 实作 Flux Pattern

使用 React 作为前端架构的朋友对於 Flux 应该都不陌生,React 也内建了 Flux 让...