首页 > 解决方案 > 关于 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 时我无法找到内核映像

标签: cuefi

解决方案


推荐阅读