安装完Windows系统后而出现的启动选项
(相关的信息存储在NVRAM, NVRAM是BIOS ROM中的一段区域,一般定义为 64k byte, 现在EFI把所有的变量都存在这里。),
可以删除和建立,和bcdboot.exe有关;
在BDS阶段,固件会默认引导Windows启动管理器。
默认情况下,UEFI固件加载的启动文是EFI\BOOT\bootx64.efi(bootia32.efi),
而Windows强制写入的启动项则会加载EFI\MICROSOFT\BOOT\bootmgfw.efi,这两个文件其实是一模一样的文件。
引导Windows的引导文件
UEFI的必需引导文件(windows下本质为bootmgfw)
git clone –recursive https://github.com/tianocore/edk2.git
https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/nasm-2.15.05-installer-x64.exe
NASM_PREFIX=C:\nasm-2.15.05\
ASL Compiler https://acpica.org/sites/acpica/files/iasl-win-20210331.zip 将iasl.exe放到c:\ASL\ 目录下
安装python3 ,并配置环境变量PYTHON_HOME
安装Cygwin http://www.cygwin.com/setup-x86_64.exe 修改edk2\BaseTools\Conf 目录下的target文件 edk2\Conf(未编译时目录为空,编译时根据上面目录的文件生成,后续编译使用此目录下文件)
配置处理器架构和编译工具链
配置环境变量CYGWIN_HOME
edk2\Conf(未编译时目录为空,编译时根据上面目录的文件生成,后续编译使用此目录下文件) 配置处理器架构和编译工具链
执行edksetup.bat,配置编译运行环境
执行build命令进行编译(编译时使用target文件内的配置,不指定其他参数时编译EmulatorPkg,uefi模拟器)
build -a X64 -p [ACTIVE_PLATFORM] -m [指定模块.inf]
一、Emulator模拟器 二、OVMF 运行方式 三、pe U盘
使用build命令默认编译Emulator模拟器,路径: edk2\Build\EmulatorX64\DEBUG_VS2019\X64\WinHost.exe
Tips:需要使用英文键盘,否则程序失去焦点
OVMF(Open Virtual Machine Firmware,开放虚拟机固件)是用于虚拟机上的UEFI固件。
build -a X64 -p OvmfPkg\OvmfPkgX64.dsc edk2\Build\OvmfX64\DEBUG_VS2019\FV\OVMF.fd
qemu-system-x86_64.exe -bios "OVMF.fd" -M "pc" -m 256 -cpu "qemu64" -vga cirrus -serial vc -parallel vc -name "UEFI" -boot order=dc
包(Package)和模块(Module) 包(package) :包是一组模块和平台描述文件(.dsc文件)、包声明文件(.dec文件)组成的集合。在EDK 2 根目录下,有很多以*pkg命 名的文件夹,每一个这样的文件夹称为一个package。 模块(module) :由元数据文件(工程文件即.inf文件)和源文件(.c .asm .uni .vfr, 有些情况可包含.efi文件)组成。模块(可执行文件,即.efi文件)像插件一样可以动态的加载到UEFI内核中。 包相当于vs中的项目,.dsc文件相当于vs项目中的.sln文件 模块相当于vs中的工程,.inf文件相当于vs项目中的.vcxproj文件
.inf用于编译一个模块,.dsc用于编译一个Package,
包含了[Defines] 、 [LibraryClasses] 、 [Components] 等几个必须部分
以及[PCD]、[BuildOptions]等可选部分。
[Defines]块:必须是.dsc文件的第一个部分,用于设置build相关的全局宏变量。
[LibraryClasses] 块:定义了库的名字以及库.inf文件的路径。这些库可被[Components]块内的模块引用。
[Components] 块:在该区域内定义的模块都会被build工具编译并生成.efi文件。
包含了必须区块:[Defines],
可选区块:[Includes]、[LibraryClasses]、[Guids]、[Protocols]、[Ppis]和[PCD]几个部分。
[Defines] :用于提供package的名称、GUID、版本号等信息。
[Includes] :列出了本package提供的头文件所在的目录。
[LibraryClasses] :Package可通过.dec文件对外提供库,每个库都必须有一个头文件,放在Include\Library目录下。本区块用于明确库和头文件的对应关系。
Visual Studio: "C:\WINDOWS\system32\vsjitdebugger.exe" -p %ld -e %ld
__debugbreak
https://software.intel.com/sites/default/files/managed/de/00/UDK_Debugger_Tool_v1_5_Win.zip
(位于C:\Program Files (x86)\Intel\Intel(R) UEFI Development Kit Debugger Tool\)
-serial tcp:localhost:20716,server
How to debug OVMF with QEMU using WinDbg · tianocore/tianocore.github.io Wiki
Ovmf source level debug - S!mon SAYS (damn99.com)
小華的部落格: Intel® UEFI Development Kit Debugger Tool (Intel UDK Debugger and OVMFPkg) (biosengineer.blogspot.com)
2015 Hacking Team
hackedteam/vector-edk: EFI Development Kit
英特尔 ATR 培训:从攻击者和防御者的角度来看,BIOS/UEFI 系统固件的安全性
enascimento/firmware-security-training: Intel ATR Training: Security of BIOS/UEFI System Firmware from Attacker and Defender Perspectives
固件笔记 mytbk/firmware_notes: some notes aboutfirmware(BIOS,UEFI,coreboot,routers,embedded system,etc.)
Disable PatchGuard and DSE at boot time
Mattiwatti/EfiGuard: Disable PatchGuard and DSE at boot time
A tool for UEFI firmware reverse engineering
yeggor/uefi_retool: A tool for UEFI firmware reverse engineering
Hyper-V Hacking Framework For Windows 10 x64 (AMD & Intel)
_xeroxz / Voyager · GitLab (githacks.org)
唉,有半年没搞了,忘没了,0.0 不知道整天忙活了个啥子。