Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 可以在GDB中调试BIOS映像吗?_Debugging_Gdb_Qemu_Bios - Fatal编程技术网

Debugging 可以在GDB中调试BIOS映像吗?

Debugging 可以在GDB中调试BIOS映像吗?,debugging,gdb,qemu,bios,Debugging,Gdb,Qemu,Bios,我有一个自定义bios(我实际上有SPI Flash bios的映像,但在我看来应该是相同的),我想用GDB进行调试。可以使用GDB运行吗?我知道文件中的第一条执行指令(0h3FFFF0)在哪里,文件应该是汇编指令序列。有没有办法按照流程一步一步地运行bios?首先,假设SPI映像只包含bios可执行文件是不正确的。它通常远不止这些(例如,ME、设置参数、闪存描述符)。为了调查图像中的内容,我建议使用binwalk,如果幸运的话,它会检测图像的布局。然后您可以通过binwalk-e提取图像部分

我有一个自定义bios(我实际上有SPI Flash bios的映像,但在我看来应该是相同的),我想用GDB进行调试。可以使用GDB运行吗?我知道文件中的第一条执行指令(0h3FFFF0)在哪里,文件应该是汇编指令序列。有没有办法按照流程一步一步地运行bios?

首先,假设SPI映像只包含bios可执行文件是不正确的。它通常远不止这些(例如,ME、设置参数、闪存描述符)。为了调查图像中的内容,我建议使用
binwalk
,如果幸运的话,它会检测图像的布局。然后您可以通过
binwalk-e
提取图像部分

第二,因为我不知道我们是谈论现代硬件还是一些过时的硬件,所以我会尽量做到笼统。我认为GDB不能运行BIOS二进制文件,因为这些二进制文件不包含GDB可以理解的任何调试信息。GDB需要知道它处理的是什么可执行文件,使用的ABI是什么,被调试目标的物理体系结构是什么。即使它知道所有这些信息,代码也只能被反汇编,因为BIOS是从低级硬件初始化开始的,不能在GDB中重新创建。另一方面,现代硬件BIOS(UEFI固件)通常是经过签名的


使用提取的BIOS二进制文件,您能做的最好的事情是获取硬件的数据表,并使用反汇编程序(如
IDA Pro
radare2
)来研究代码流。

这个问题中缺少的最重要的事情是执行这些二进制文件的确切硬件。是x86吗?如果你能提供你需要的理由,也许我可以给你更多的帮助。