我有一个自定义BIOS(我实际上有SPI Flash Bios的图像,但在我看来它应该是相同的)我想用GDB调试。是否可以使用GDB运行?我知道文件里面有第一个执行指令(0h3FFFF0),文件应该是汇编指令序列。有没有办法跟踪流程并逐步运行bios?
答案 0 :(得分:0)
首先,假设SPI映像仅包含BIOS可执行文件是不正确的。它通常远远超过那个(即ME,设置参数,flash描述符)。要调查图片中的内容,我建议您使用binwalk <spi_image>
,如果幸运的话,它会检测图片的布局。然后,您可以按binwalk -e <spi_image>
提取图像部分。
其次,既然我不知道我们是在谈论现代硬件还是过时的话,我会尝试一般。我不认为GDB能够运行BIOS二进制文件,因为这些二进制文件不包含GDB可以理解的任何调试信息。 GDB需要知道它处理的可执行文件,使用的ABI是什么以及被调试目标的物理架构是什么。即使它知道所有这些信息,代码也只能被反汇编,因为BIOS以低级硬件初始化开始,无法在GDB中重新创建。另一方面,现代硬件BIOS(UEFI固件)通常是签名的。
使用解压缩的BIOS二进制文件可以做的最好的事情是获取硬件的数据表并使用反汇编程序,如IDA Pro
或radare2
来调查代码流。