c - 关于 uefi hook "SetVirtualAddressMap" 的一些问题?
问题描述
我想挂钩 SetVirtualAddressMap 并通过枚举虚拟映射获取内核映像,这是代码
static EFI_STATUS (EFIAPI *OriginSetVirtualAddressMap)(IN UINTN MemoryMapSize, IN UINTN DescriptorSize, IN UINT32 DescriptorVersion, IN EFI_MEMORY_DESCRIPTOR *VirtualMap); //SetVirtualAddressMap prototype
// then i define a hook fun and write the code to find kernel image like this
for (Index = 0; DescriptorSize * Index < MemoryMapSize; Index ++) {
if (CurDescriptor->Type == EfiLoaderData) {
MACH_HEADER64 *MachHeader64 = (MACH_HEADER64 *)(CurDescriptor->PhysicalStart);
if (MachHeader64->Magic == 0xfeedfacf && MachHeader64->FileType == 0x02) {
break ;
}
}
CurDescriptor = NEXT_MEMORY_DESCRIPTOR(CurDescriptor, DescriptorSize);
}
此代码在低于 mac11 的版本上有效,但在高于 mac11 的版本上无效,这意味着当 mac 版本高于 mac11 时我无法找到内核映像
解决方案
推荐阅读
- c# - 如何修复 SQLite 约束异常?
- python - 当我制作问题列表/答案列表时发生追溯索引错误
- autofac - 在构造函数注入期间解析为父接口
- python - 如何修复 Python 中标记输入的条件语句?
- javascript - 如何使用 JavaScript (Vuejs) 在文本区域中读取制表符格式的文本
- linux - 这些 awk 命令是否容易受到代码注入的影响?
- ios - 在 Swift 5 中从 JSON 对象创建对象
- javascript - 我收到错误:“参数列表后缺少”
- html - Django 不显示 base.html 以外的模板
- vue.js - Vue子组件结构