前言
通常而言,调试应用程序是很简单的,调试驱动要复杂的多,而调试BIOS / Boot Loader则要复杂的多。JTag技术由于其独立于OS,拥有更强大的能力。GDK7是基于英特尔Skylake微架构研发的一套调试套件,通过DCI(Direct Connect Interface)协议实现对目标机的高速调试。本文尝试探索利用GDK7套件实现对Grub的调试。
本文用到如下工具:
- GDK7套件 (GDK7-100)
- Nano Code v1.0.8
- Ubuntu上的hexedit
- PEViewer
本文用到的环境是Ubuntu 19.04 x64,GPT分区,EFI模式boot,boot loader为grub2 64位(v2.04)。
背景
阅读本文需要读者具备Grub2,EFI,GPT等相关背景知识。相关知识很容易搜索到,所以本文不在赘述。
本文所用到的调试对象为GDK7,分区如下:
sda2分区即为EFI 分区,已经被mount到/boot/efi:
/boot/efi/EFI/下有三个文件,bootx64.efi即是bootloader的stage2的主image,也是本文的主目标:
我们现来看看efi文件
文件头两个字节, “MZ”以及0x80位置的“PE”说明这是一个PE32+格式文件。下面我们用PEviewer看一下它的更多信息:
准备环境
连接USB线,启动Nano Code
USB线很好