Windows下调试UEFI程序:Visual Studio调试

以edk2\MdeModulePkg\Application\HelloWorld这个项目作为调试目标。

1. 使用VS2017建立Makefile工程

VS2017, 新建 project,取名X64dbg_vs。

Visual C++ > Other > Makefile Project, 注意项目路径为HelloWord程序路径。

随便填写config中的字符串,以及output文件的名称。 Finish。

 

Makefile项目建好了:

 

 2. 设置调试目标和调试文件夹

右击项目 > 属性 > Debugging

Command设置为WinHost.exe。

Working Directory设置为C:\UEFIWorkspace\Build\EmulatorX64\DEBUG_VS2017\X64\, 注意X64后面的斜杠是需要的。

 3. 修改工程文件

打开工程文件:

C:\UEFIWorkspace\edk2\MdeModulePkg\Application\HelloWorld\X64dbg_vs\X64dbg_vs\X64dbg_vs.vcxproj

找到<NMakeBuildCommandLine>节点所在的区域,两个Debug和两个Release:

 针对Debug x64部分进行修改,分别修改以下三个节点的内容:

<NMakeBuildCommandLine>

<NMakeCleanCommandLine>

<NMakeReBuildCommandLine>

修改之后的xml:

<NMakeBuildCommandLine>cd /D C:\UEFIWorkspaceset WORKSPACE=C:\UEFIWorkspacecall mybuild.batcall edk2\edksetup.batcall build.bat -p EmulatorPkg\EmulatorPkg.dsc -a X64 -m MdeModulePkg\Application\HelloWorld\HelloWorld.inf -b DEBUG
</NMakeBuildCommandLine>
<NMakeOutput>X64dbg_vs.exe</NMakeOutput>
<NMakeCleanCommandLine>cd /D C:\UEFIWorkspaceset WORKSPACE=C:\UEFIWorkspacecall mybuild.batcall edk2\edksetup.batcall build.bat -p EmulatorPkg\EmulatorPkg.dsc -a X64 -m MdeModulePkg\Application\HelloWorld\HelloWorld.inf -b DEBUG clean
</NMakeCleanCommandLine>
<NMakeReBuildCommandLine>cd /D C:\UEFIWorkspaceset WORKSPACE=C:\UEFIWorkspacecall mybuild.batcall edk2\edksetup.batcall build.bat -p EmulatorPkg\EmulatorPkg.dsc -a X64 -m MdeModulePkg\Application\HelloWorld\HelloWorld.inf -b DEBUG cleancall build.bat -p EmulatorPkg\EmulatorPkg.dsc -a X64 -m MdeModulePkg\Application\HelloWorld\HelloWorld.inf -b DEBUG
</NMakeReBuildCommandLine>

4. 添加代码

将HelloWorld项目的源码HelloWorld.c添加到工程文件的Source Files中,方便后面调试时查看代码: 

 

5. 编译代码并调试

右击项目 > Build,观察控制台输出:

找一行源码添加断点,右击 > BreakPoint > Insert BreakPoint

 按F5开始运行。

编译好的HelloWorld.efi和WinHost.exe在模拟器的同一目录下,也就是UEFI Shell更目录FS0:

进入FS0, 运行HellowWorld.efi, 运行到了断点处:

 

 使用Visual Studio调试UEFI程序的方法大致如此。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/26272.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【并发编程】ShenyuAdmin里面数据同步用到的无锁环形队列LMAX Disruptor并发框架

并发&#xff0c;数据同步往往是业务开发中比较重要的部分。 shenyu网关数据同步设计方案图 shenyu官网给出的同步设计方案图如下&#xff1a; 基于事件异步并发框架com.lmax.disruptor 下载下示例代码&#xff0c;跑起来发现&#xff0c;在shenyuAdmin模块里面用到了com.lma…

【2.2】Java微服务:nacos的使用

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 深度学习 ✨特色专栏&#xff1a; 知识分享 &…

Leetcode.2034 股票价格波动

题目链接 Leetcode.2034 股票价格波动 rating : 1832 题目描述 给你一支股票价格的数据流。数据流中每一条记录包含一个 时间戳 和该时间点股票对应的 价格 。 不巧的是&#xff0c;由于股票市场内在的波动性&#xff0c;股票价格记录可能不是按时间顺序到来的。某些情况下&a…

HTR-01 桌式4英寸快速退火炉

HTR-01 桌式4英寸快速退火炉 HTR-01A快速退火炉系列采用红外辐射加热技术&#xff0c;可实现4寸晶圆片吋样品快速升温和降温&#xff0c;同时搭配超高精度温度控制系统&#xff0c;可达到极佳的温场均匀性&#xff0c;对材料的快速热处理(RTP)、快速退火(RTA)、快速热氮化(RTN)…

观测数据建模

观测数据 观测数据 / 样本空间覆盖均匀 psm 观测数据建模 因果模型得到什么样的值 base 0/1 gmv uplift delat 模型可以得到 confounder 的表征&#xff0c;而 NN 可以支持更个性化的结构。在这里给出两种思路&#xff1a; 思路1: 使用树模型生成的 confounder embedd…

大规模数据处理的技术的五个时代和四代引擎

石器时代 随着互联网的蓬勃发展&#xff0c;数据量在呈指数型增长。早在2003年之前&#xff0c;各大厂商都已经严重面临大规模数据的处理难题&#xff0c;比如Google就已经面对大于600亿的搜索量。如何从海量的原始数据中挖掘出有效的信息&#xff0c;如何保证数据挖掘程序的容…

react组件编写最佳实践

react组件编写最佳实践 作为 React.js 开发的新手&#xff0c;理解基本原则并坚持实用性对于更好地快速开发至关重要。无论我们是在处理简单的任务&#xff08;例如构建初学者待办事项应用程序&#xff09;还是更复杂的项目&#xff08;例如建立电子商务平台&#xff09;&…

【Java】-【tomcat部署项目】

Tomcat 的目录结构 bin&#xff1a;Tomcat 的启动、关闭脚本。 conf&#xff1a;Tomcat 配置文件。 lib&#xff1a;Tomcat 需要的类库&#xff08;jar 包&#xff09;。 logs&#xff1a;日志目录。 temp&#xff1a;Tomcat 运行时产生的临时文件。 webapps&#xff1a;存放 …

相机取图后将数据转换成对应的图像处理库图像文件

相机取图后将数据转换成对应的图像处理库图像文件 前言提要一、大华相机1.to HImage 总结 前言 不同相机取完图像后的图像数据包里包含的数据并不一定是相同的&#xff0c;而且相机取图后的图像数据第三方的视觉库&#xff08;Halcon&#xff0c;visionpro等&#xff09;也并不…

React diff 根据相对位置的 diff 算法

文章目录 diff 算法没有 key 时的diff通过 key 的 diff查找需要移动的节点移动节点添加新元素移除不存在的元素缺点 diff 算法 没有 key 时的diff 根据新旧列表的长度进行 diff 公共长度相同的部分直接patch新列表长度>旧列表长度则添加&#xff0c;否则删除 function pa…

Vue3_02 创建Vue3.0工程

1.使用 vue-cli 创建 ## 查看 vue/cli 版本&#xff0c;确保 vue/cli 版本在4.5.0以上 vue -V 或 vue --version## 安装或升级你的 vue/cli npm install -g vue/cli## 创建 vue create vue_test## 启动 cd vue-test npm run serve 2.使用 vite 创建 什么是vite?——新一代…

31.SpringMVC

SpringMVC MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为实体类Bean&#xff1a;专门存储业务数据的…

RxJava 倒计时,轮询器

笔记 倒计时 /*** 短信倒计时** param s*/private Subscription subscription30;public void startCountdownFinishRx30(int s) {clearFinishSubscription30();subscription30 Observable.interval(0, 1, TimeUnit.SECONDS).take(s 1).map(new Func1<Long, Long>() {O…

Java设计模式---工厂方法(Factory Method)模式

说明 工厂方法&#xff08;Factory Method&#xff09;模式是一种工厂模式&#xff0c;也叫多态性工厂&#xff08;Poloymorphic Factory&#xff09;模式。 工厂方法模式涉及如下角色&#xff1a; 抽象工厂角色&#xff1a;给出具体工厂角色必须实现的接口。具体工厂角色&a…

图像 检测 - DETR: End-to-End Object Detection with Transformers (arXiv 2020)

图像 检测 - DETR: End-to-End Object Detection with Transformers - 端到端目标检测的Transformers&#xff08;arXiv 2020&#xff09; 摘要1. 引言2. 相关工作2.1 集预测2.2 Transformers和并行解码2.3 目标检测 3. DETR模型References 声明&#xff1a;此翻译仅为个人学习…

深度学习,计算机视觉任务

目录 计算机视觉任务 1.K近邻算法 2.得分函数 3.损失函数的作用 4.向前传播整体流程 5.反向传播计算方法 计算机视觉任务 机器学习的流程&#xff1a; 数据获取 特征工程 建立模型 评估与应用 计算机视觉&#xff1a; 图像表示&#xff1a;计算机眼中的图像&#…

万界星空科技/免费开源MES系统/免费仓库管理

仓库管理&#xff08;仓储管理&#xff09;&#xff0c;指对仓库及仓库内部的物资进行收发、结存等有效控制和管理&#xff0c;确保仓储货物的完好无损&#xff0c;保证生产经营活动的正常进行&#xff0c;在此基础上对货物进行分类记录&#xff0c;通过报表分析展示仓库状态、…

开源项目如何贡献代码

以腾讯犀牛鸟开源项目ncnn为例 目录 fork项目仓库 添加远程仓库 同步更新仓库 贡献代码提交新PR PR未merge更新PR fork项目仓库 只需要做一次 到仓库页面点击fork&#xff0c;然后create forkTencent/ncnn: ncnn is a high-performance neural network inference frame…

性能测试浅谈

早期的性能测试更关注后端服务的处理能力。 一个用户去访问一个页面的请求过程&#xff0c;如上图。 数据传输时间 当你从浏览器输入网址&#xff0c;敲下回车&#xff0c;开始... 真实的用户场景请不要忽视数据传输时间&#xff0c;想想你给远方的朋友写信&#xff0c;信件…

龙架构 Arch Linux 发行版发布

导读近日&#xff0c;龙架构 Arch Linux 发行版官方网站宣布结束 beta 状态&#xff0c;正式支持龙架构 (LoongArch)。 Arch Linux 是一种轻量级、可定制、灵活的 Linux 操作系统。作为一款简单、现代、开放的操作系统&#xff0c;Arch Linux 旨在基于 “KISS 原则”&#xff0…