在继续阅读之前,你需要了解的一些基础知识:
- 串行通信:这是通常用于调试输入和输出的信号。一般来说,这需要将电缆连接到引脚上;然而,使用QEMU,我们可以模拟到stdin/stdout。
- 引脚:这是嵌入式系统发送信号的方式(串行、JTAG等)。
- 工具链:这是我们如何编译代码的。我们经常进行交叉编译(因为我们假设在本教程中我们没有任何ARM硬件)。你可能听到的工具链是eabi、gnueabi和gnueabi-hf。对于本教程,我们只考虑eabi,因为它是裸机工具链(例如没有操作系统)。要了解更多关于gnueabi和gnueabi-hf的信息,请点击这里。
https://stackoverflow.com/questions/26692065/difference-between-arm-eabi-arm-gnueabi-and-gnueabi-hf-compilers#:~:text=the%20eabi%20stands%20for%20the,compilation%20of%20code%20for%20linux
要开始,我们需要某种Linux平台。为此,我使用了Ubuntu 20.04,但你可以选择你想要兼容下面列出软件的任何发行版。在你的发行版中,我们需要安装以下软件:
- GDB Multiarch —sudo apt install gcc-multiarch
- qemu (I am using 5.2 in this demo) — https://www.qemu.org/download/#source
- 逆向工程工具(我推荐Ghidra,但这是个人偏好) <