ubuntu + gdb + ovmf + qemu 虚拟机调试UEFI

2023-10-10 19:59

本文主要是介绍ubuntu + gdb + ovmf + qemu 虚拟机调试UEFI,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

调试BIOS 大部分情况都是在真实的板子上面, 就是build 之后, 烧录到rom 里面, 整个流程非常耗时间,下面讲解如何在qemu 上面调试uefi driver.

 

 

 

 

环境: ubuntu 18.04

1. 编译:1. source edksetup.sh        // 这一步,是设置环境变量

               2.build -p OvmfPkg/OvmfPkgIa32.dsc -t GCC5 -D SOURCE_DEBUG_ENABLE

2. 执行qemu

qemu-system-i386 -s -pflash OVMF.fd  -net none -debugcon file:-debug.log -global isa-debugcon.iobase=0x402 -hda fat:rw:hda-contents/

$ qemu-system-i386 -s -pflash OVMF_CODE.fd -pflash OVMF_VARS.fd -net none -debugcon file:-debug.log -global isa-debugcon.iobase=0x402 -hda fat:rw:hda-contents -global e1000.romfile="E1000Fmp.rom" -device e1000

 

3. 启动gdb

 

gdb 基础:

info register: 列出当前寄存器的值

info breakpoint: 列出所有的断点

info files:

从串口输出来的文件读出相应driver load 进内存起始地址:

结合上面图中的信息算出代码段和数据段的位置:

7d2a000+240 = 7d2a240

7d2a000+240+58c0 = 7D2FB00

 

加载符号表并设置断点:

 

让GDB 连上 qemu;

Caption

 

在QEMU 里面重启:

这时候,可以看到GDB 停在了刚刚下的断点处:

key 入list ,可以列出最近的10 行:

接下来,就是gdb 常规操作了。

 

x/10i  显示程序当前位置开始往后的10条汇编指令。 它可以看到call 指令相关内容 ,就是能知道会调用哪个函数,方便你知道load 哪个符号表。

n 显示下一条代码

 

 

 

linux 环境安装:

chmod +x UDK_Debugger_Tool_v1_5_1.bin

Desktop$ ./UDK_Debugger_Tool_v1_5_1.bin

 

这篇关于ubuntu + gdb + ovmf + qemu 虚拟机调试UEFI的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/182753

相关文章

Linux(centos7)虚拟机没有IP问题及解决方案

《Linux(centos7)虚拟机没有IP问题及解决方案》文章介绍了在CentOS7中配置虚拟机网络并使用Xshell连接虚拟机的步骤,首先,检查并配置网卡ens33的ONBOOT属性为yes,然后... 目录输入查看ZFhrxIP命令:ip addr查看,没有虚拟机IP修改ens33配置文件重启网络Xh

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

Java服务实现开启Debug远程调试

《Java服务实现开启Debug远程调试》文章介绍如何通过JVM参数开启Java服务远程调试,便于在线上排查问题,在IDEA中配置客户端连接,实现无需频繁部署的调试,提升效率... 目录一、背景二、相关图示说明三、具体操作步骤1、服务端配置2、客户端配置总结一、背景日常项目中,通常我们的代码都是部署到远程

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

JavaScript中的高级调试方法全攻略指南

《JavaScript中的高级调试方法全攻略指南》什么是高级JavaScript调试技巧,它比console.log有何优势,如何使用断点调试定位问题,通过本文,我们将深入解答这些问题,带您从理论到实... 目录观点与案例结合观点1观点2观点3观点4观点5高级调试技巧详解实战案例断点调试:定位变量错误性能分

Ubuntu如何升级Python版本

《Ubuntu如何升级Python版本》Ubuntu22.04Docker中,安装Python3.11后,使用update-alternatives设置为默认版本,最后用python3-V验证... 目China编程录问题描述前提环境解决方法总结问题描述Ubuntu22.04系统自带python3.10,想升级

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配