23#define MACHO_PAGE_SIZE 4096U
28#define MACHO_ALIGN(x) ALIGN_VALUE((x), MACHO_PAGE_SIZE)
69 IN UINT32 HeaderOffset,
91 IN UINT32 HeaderOffset,
114 IN UINT32 HeaderOffset,
234 IN CONST CHAR8 *SegmentName
249 IN CONST CHAR8 *SegmentName
264 IN CONST CHAR8 *SegmentName
281 IN CONST CHAR8 *SectionName
298 IN CONST CHAR8 *SectionName
315 IN CONST CHAR8 *SectionName
331 IN CONST CHAR8 *SegmentName,
332 IN CONST CHAR8 *SectionName
348 IN CONST CHAR8 *SegmentName,
349 IN CONST CHAR8 *SectionName
365 IN CONST CHAR8 *SegmentName,
366 IN CONST CHAR8 *SectionName
555 IN CONST CHAR8 *Prefix
978 IN UINT64 LinkAddress,
995 IN UINT32 LinkAddress,
1012 IN UINT64 LinkAddress,
1032 OUT UINT32 *FileOffset,
1033 OUT UINT32 *MaxSize OPTIONAL
1052 OUT UINT32 *FileOffset,
1053 OUT UINT32 *MaxSize OPTIONAL
1072 OUT UINT32 *FileOffset,
1073 OUT UINT32 *MaxSize OPTIONAL
1092 OUT UINT32 *FileOffset,
1093 OUT UINT32 *MaxSize OPTIONAL
1104 IN CONST CHAR8 *Name
1115 IN CONST CHAR8 *Name
1128 IN CONST CHAR8 *SymbolName
1141 IN CONST CHAR8 *SymbolName
1158 IN CONST CHAR8 *SmcpName,
1159 IN UINTN ClassNameSize,
1160 OUT CHAR8 *ClassName
1171 IN CONST CHAR8 *VtableName
1186 IN CONST CHAR8 *ClassName,
1187 IN UINTN FunctionPrefixSize,
1188 OUT CHAR8 *FunctionPrefix
1205 IN CONST CHAR8 *MetaClassName,
1206 IN UINTN ClassNameSize,
1207 OUT CHAR8 *ClassName
1222 IN CONST CHAR8 *ClassName,
1223 IN UINTN VtableNameSize,
1224 OUT CHAR8 *VtableName
1239 IN CONST CHAR8 *ClassName,
1240 IN UINTN VtableNameSize,
1241 OUT CHAR8 *VtableName
1256 IN CONST CHAR8 *ClassName,
1257 IN UINTN FinalSymbolNameSize,
1258 OUT CHAR8 *FinalSymbolName
1269 IN CONST CHAR8 *SymbolName
1280 IN CONST CHAR8 *Name
1341 IN CONST CHAR8 *SmcpName,
1359 IN CONST CHAR8 *SmcpName,
1377 IN CONST CHAR8 *SmcpName,
1462 OUT CONST CHAR8 **StringTable OPTIONAL,
1464 OUT UINT32 *NumLocalSymbols OPTIONAL,
1466 OUT UINT32 *NumExternalSymbols OPTIONAL,
1468 OUT UINT32 *NumUndefinedSymbols OPTIONAL
1490 OUT CONST CHAR8 **StringTable OPTIONAL,
1491 OUT CONST
MACH_NLIST **LocalSymbols OPTIONAL,
1492 OUT UINT32 *NumLocalSymbols OPTIONAL,
1493 OUT CONST
MACH_NLIST **ExternalSymbols OPTIONAL,
1494 OUT UINT32 *NumExternalSymbols OPTIONAL,
1495 OUT CONST
MACH_NLIST **UndefinedSymbols OPTIONAL,
1496 OUT UINT32 *NumUndefinedSymbols OPTIONAL
1518 OUT CONST CHAR8 **StringTable OPTIONAL,
1520 OUT UINT32 *NumLocalSymbols OPTIONAL,
1522 OUT UINT32 *NumExternalSymbols OPTIONAL,
1524 OUT UINT32 *NumUndefinedSymbols OPTIONAL
1582 OUT UINT32 *MaxSize OPTIONAL
1600 OUT UINT8 *Destination,
1601 IN UINT32 DestinationSize,
1603 OUT UINT64 *FileOffset OPTIONAL
1667 IN UINT32 BufferSize,
1670 OUT UINT32 *FatOffset,
1686 IN OUT UINT8 **FileData,
1687 IN OUT UINT32 *FileSize,
1702 IN OUT UINT8 **FileData,
1703 IN OUT UINT32 *FileSize
1717 IN OUT UINT8 **FileData,
1718 IN OUT UINT32 *FileSize
UINT32 MACH_LOAD_COMMAND_TYPE
MACH_SEGMENT_COMMAND_64 * MachoGetNextSegment64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_SEGMENT_COMMAND_64 *Segment OPTIONAL)
BOOLEAN MachoSymbolIsSection32(IN CONST MACH_NLIST *Symbol)
BOOLEAN MachoRelocateSymbol64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 LinkAddress, IN OUT MACH_NLIST_64 *Symbol)
UINT64 MachoRuntimeGetEntryAddress(IN VOID *Image)
BOOLEAN MachoInitializeContext64(OUT OC_MACHO_CONTEXT *Context, IN VOID *FileData, IN UINT32 FileSize, IN UINT32 HeaderOffset, IN UINT32 InnerSize)
MACH_NLIST_ANY * MachoGetLocalDefinedSymbolByName(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *Name)
BOOLEAN MachoSymbolNameIsCxx(IN CONST CHAR8 *Name)
BOOLEAN MachoSymbolNameIsPadslot(IN CONST CHAR8 *Name)
BOOLEAN MachoRelocateSymbol32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 LinkAddress, IN OUT MACH_NLIST *Symbol)
MACH_NLIST_64 * MachoGetMetaclassSymbolFromSmcpSymbol64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Smcp)
BOOLEAN MachoGetClassNameFromMetaClassPointer(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *MetaClassName, IN UINTN ClassNameSize, OUT CHAR8 *ClassName)
MACH_NLIST_64 * MachoGetSymbolByIndex64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Index)
UINT32 MachoGetSymbolTable32(IN OUT OC_MACHO_CONTEXT *Context, OUT CONST MACH_NLIST **SymbolTable, OUT CONST CHAR8 **StringTable OPTIONAL, OUT CONST MACH_NLIST **LocalSymbols OPTIONAL, OUT UINT32 *NumLocalSymbols OPTIONAL, OUT CONST MACH_NLIST **ExternalSymbols OPTIONAL, OUT UINT32 *NumExternalSymbols OPTIONAL, OUT CONST MACH_NLIST **UndefinedSymbols OPTIONAL, OUT UINT32 *NumUndefinedSymbols OPTIONAL)
UINT32 MachoGetInnerSize(IN OUT OC_MACHO_CONTEXT *Context)
BOOLEAN MachoRelocateSymbol(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 LinkAddress, IN OUT MACH_NLIST_ANY *Symbol)
BOOLEAN MachoGetClassNameFromSuperMetaClassPointer(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SmcpName, IN UINTN ClassNameSize, OUT CHAR8 *ClassName)
MACH_SECTION * MachoGetSectionByName32(IN OUT OC_MACHO_CONTEXT *Context, IN MACH_SEGMENT_COMMAND *Segment, IN CONST CHAR8 *SectionName)
MACH_SECTION_64 * MachoGetSegmentSectionByName64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SegmentName, IN CONST CHAR8 *SectionName)
BOOLEAN MachoSymbolIsLocalDefined32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol)
CONST CHAR8 * MachoGetSymbolName32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol)
UINT32 MachoGetFileSize(IN OUT OC_MACHO_CONTEXT *Context)
BOOLEAN MachoSymbolIsLocalDefined(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
MACH_HEADER_64 * MachoGetMachHeader64(IN OUT OC_MACHO_CONTEXT *Context)
MACH_SECTION_ANY * MachoGetSectionByName(IN OUT OC_MACHO_CONTEXT *Context, IN MACH_SEGMENT_COMMAND_ANY *Segment, IN CONST CHAR8 *SectionName)
CONST CHAR8 * MachoGetIndirectSymbolName(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
CONST CHAR8 * MachoGetClassNameFromVtableName(IN CONST CHAR8 *VtableName)
MACH_SECTION * MachoGetNextSection32(IN OUT OC_MACHO_CONTEXT *Context, IN MACH_SEGMENT_COMMAND *Segment, IN MACH_SECTION *Section OPTIONAL)
BOOLEAN MachoGetSymbolByRelocationOffset32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Address, OUT MACH_NLIST **Symbol)
BOOLEAN MachoSymbolIsLocalDefined64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol)
MACH_SEGMENT_COMMAND * MachoGetSegmentByName32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SegmentName)
MACH_NLIST_64 * MachoGetLocalDefinedSymbolByName64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *Name)
BOOLEAN MachoGetVtableSymbolsFromSmcp(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SmcpName, OUT CONST MACH_NLIST_ANY **Vtable, OUT CONST MACH_NLIST_ANY **MetaVtable)
CONST CHAR8 * MachoGetIndirectSymbolName64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol)
UINT32 MachoGetSymbolTable64(IN OUT OC_MACHO_CONTEXT *Context, OUT CONST MACH_NLIST_64 **SymbolTable, OUT CONST CHAR8 **StringTable OPTIONAL, OUT CONST MACH_NLIST_64 **LocalSymbols OPTIONAL, OUT UINT32 *NumLocalSymbols OPTIONAL, OUT CONST MACH_NLIST_64 **ExternalSymbols OPTIONAL, OUT UINT32 *NumExternalSymbols OPTIONAL, OUT CONST MACH_NLIST_64 **UndefinedSymbols OPTIONAL, OUT UINT32 *NumUndefinedSymbols OPTIONAL)
UINT32 MachoGetIndirectSymbolTable32(IN OUT OC_MACHO_CONTEXT *Context, OUT CONST MACH_NLIST **SymbolTable)
MACH_NLIST * MachoGetSymbolByIndex32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Index)
EFI_STATUS FatFilterArchitectureByType(IN OUT UINT8 **FileData, IN OUT UINT32 *FileSize, IN MACH_CPU_TYPE CpuType)
EFI_STATUS FatFilterArchitecture64(IN OUT UINT8 **FileData, IN OUT UINT32 *FileSize)
MACH_SECTION * MachoGetSegmentSectionByName32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SegmentName, IN CONST CHAR8 *SectionName)
BOOLEAN MachoGetFunctionPrefixFromClassName(IN CONST CHAR8 *ClassName, IN UINTN FunctionPrefixSize, OUT CHAR8 *FunctionPrefix)
BOOLEAN MachoInitializeContext32(OUT OC_MACHO_CONTEXT *Context, IN VOID *FileData, IN UINT32 FileSize, IN UINT32 HeaderOffset, IN UINT32 InnerSize)
UINT64 MachoGetLastAddress(IN OUT OC_MACHO_CONTEXT *Context)
VOID * MachoGetFileData(IN OUT OC_MACHO_CONTEXT *Context)
BOOLEAN MachoSymbolGetFileOffset32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
MACH_HEADER * MachoGetMachHeader32(IN OUT OC_MACHO_CONTEXT *Context)
CONST CHAR8 * MachoGetSymbolName64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol)
BOOLEAN MachoGetSymbolByExternRelocationOffset(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address, OUT MACH_NLIST_ANY **Symbol)
VOID * MachoGetFilePointerByAddress(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address, OUT UINT32 *MaxSize OPTIONAL)
MACH_SEGMENT_COMMAND_ANY * MachoGetNextSegment(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_SEGMENT_COMMAND_ANY *Segment OPTIONAL)
BOOLEAN MachoGetFinalSymbolNameFromClassName(IN CONST CHAR8 *ClassName, IN UINTN FinalSymbolNameSize, OUT CHAR8 *FinalSymbolName)
MACH_SECTION_64 * MachoGetNextSection64(IN OUT OC_MACHO_CONTEXT *Context, IN MACH_SEGMENT_COMMAND_64 *Segment, IN MACH_SECTION_64 *Section OPTIONAL)
BOOLEAN MachoInitialiseSymtabsExternal(IN OUT OC_MACHO_CONTEXT *Context, IN OC_MACHO_CONTEXT *SymsContext)
MACH_SECTION * MachoGetSectionByAddress32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Address)
UINT32 MachoExpandImage(IN OC_MACHO_CONTEXT *Context, OUT UINT8 *Destination, IN UINT32 DestinationSize, IN BOOLEAN Strip, OUT UINT64 *FileOffset OPTIONAL)
MACH_SECTION_64 * MachoGetSectionByName64(IN OUT OC_MACHO_CONTEXT *Context, IN MACH_SEGMENT_COMMAND_64 *Segment, IN CONST CHAR8 *SectionName)
MACH_NLIST_ANY * MachoGetMetaclassSymbolFromSmcpSymbol(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Smcp)
BOOLEAN MachoGetVtableSymbolsFromSmcp32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SmcpName, OUT CONST MACH_NLIST **Vtable, OUT CONST MACH_NLIST **MetaVtable)
MACH_SECTION_64 * MachoGetSectionByAddress64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address)
CONST CHAR8 * MachoGetIndirectSymbolName32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol)
BOOLEAN MachoGetSymbolByExternRelocationOffset32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Address, OUT MACH_NLIST **Symbol)
MACH_SEGMENT_COMMAND * MachoGetNextSegment32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_SEGMENT_COMMAND *Segment OPTIONAL)
BOOLEAN MachoSymbolIsSection64(IN CONST MACH_NLIST_64 *Symbol)
BOOLEAN MachoSymbolNameIsMetaclassPointer(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SymbolName)
MACH_HEADER_ANY * MachoGetMachHeader(IN OUT OC_MACHO_CONTEXT *Context)
BOOLEAN MachoIsSymbolValueInRange64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol)
BOOLEAN MachoInitializeContext(OUT OC_MACHO_CONTEXT *Context, IN VOID *FileData, IN UINT32 FileSize, IN UINT32 HeaderOffset, IN UINT32 InnerSize, IN BOOLEAN Is32Bit)
UINT32 MachoGetVmSize(IN OUT OC_MACHO_CONTEXT *Context)
UINT32 MachoGetSymbolTable(IN OUT OC_MACHO_CONTEXT *Context, OUT CONST MACH_NLIST_ANY **SymbolTable, OUT CONST CHAR8 **StringTable OPTIONAL, OUT CONST MACH_NLIST_ANY **LocalSymbols OPTIONAL, OUT UINT32 *NumLocalSymbols OPTIONAL, OUT CONST MACH_NLIST_ANY **ExternalSymbols OPTIONAL, OUT UINT32 *NumExternalSymbols OPTIONAL, OUT CONST MACH_NLIST_ANY **UndefinedSymbols OPTIONAL, OUT UINT32 *NumUndefinedSymbols OPTIONAL)
MACH_NLIST * MachoGetLocalDefinedSymbolByName32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *Name)
BOOLEAN MachoRelocationIsPairIntel64(IN UINT8 Type)
MACH_NLIST_ANY * MachoGetSymbolByIndex(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Index)
BOOLEAN MachoPreserveRelocationIntel64(IN UINT8 Type)
BOOLEAN MachoSymbolIsDefined64(IN CONST MACH_NLIST_64 *Symbol)
UINT32 MachoGetExpandedImageSize(IN OC_MACHO_CONTEXT *Context)
BOOLEAN MachoRelocationIsPairIntel32(IN UINT8 Type)
MACH_SECTION_64 * MachoGetSectionByIndex64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Index)
BOOLEAN MachoIsRelocationPairTypeIntel64(IN UINT8 Type)
BOOLEAN MachoIsSymbolValueInRange(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
CONST CHAR8 * MachoGetSymbolName(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
BOOLEAN MachoGetSymbolByRelocationOffset64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address, OUT MACH_NLIST_64 **Symbol)
MACH_SECTION_ANY * MachoGetNextSection(IN OUT OC_MACHO_CONTEXT *Context, IN MACH_SEGMENT_COMMAND_ANY *Segment, IN MACH_SECTION_ANY *Section OPTIONAL)
UINT32 MachoGetIndirectSymbolTable(IN OUT OC_MACHO_CONTEXT *Context, OUT CONST MACH_NLIST_ANY **SymbolTable)
BOOLEAN MachoSymbolGetDirectFileOffset(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
BOOLEAN MachoSymbolNameIsVtable(IN CONST CHAR8 *SymbolName)
BOOLEAN MachoSymbolIsDefined32(IN CONST MACH_NLIST *Symbol)
BOOLEAN MachoGetVtableNameFromClassName(IN CONST CHAR8 *ClassName, IN UINTN VtableNameSize, OUT CHAR8 *VtableName)
EFI_STATUS FatFilterArchitecture32(IN OUT UINT8 **FileData, IN OUT UINT32 *FileSize)
MACH_SEGMENT_COMMAND_64 * MachoGetSegmentByName64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SegmentName)
EFI_STATUS FatGetArchitectureOffset(IN CONST UINT8 *Buffer, IN UINT32 BufferSize, IN UINT32 FullSize, IN MACH_CPU_TYPE CpuType, OUT UINT32 *FatOffset, OUT UINT32 *FatSize)
MACH_NLIST * MachoGetMetaclassSymbolFromSmcpSymbol32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Smcp)
BOOLEAN MachoIsSymbolValueInRange32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol)
BOOLEAN MachoSymbolNameIsSmcp(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SymbolName)
BOOLEAN MachoSymbolGetFileOffset64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
BOOLEAN MachoGetVtableSymbolsFromSmcp64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SmcpName, OUT CONST MACH_NLIST_64 **Vtable, OUT CONST MACH_NLIST_64 **MetaVtable)
MACH_SEGMENT_COMMAND_ANY * MachoGetSegmentByName(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SegmentName)
MACH_SECTION * MachoGetSectionByIndex32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Index)
BOOLEAN MachoSymbolIsDefined(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
BOOLEAN MachoSymbolNameIsPureVirtual(IN CONST CHAR8 *Name)
MACH_SECTION_ANY * MachoGetSectionByIndex(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Index)
MACH_SECTION_ANY * MachoGetSegmentSectionByName(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *SegmentName, IN CONST CHAR8 *SectionName)
MACH_UUID_COMMAND * MachoGetUuid(IN OUT OC_MACHO_CONTEXT *Context)
BOOLEAN MachoSymbolGetFileOffset(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
BOOLEAN MachoGetMetaVtableNameFromClassName(IN CONST CHAR8 *ClassName, IN UINTN VtableNameSize, OUT CHAR8 *VtableName)
BOOLEAN MachoGetSymbolByExternRelocationOffset64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address, OUT MACH_NLIST_64 **Symbol)
MACH_LOAD_COMMAND * MachoGetNextCommand(IN OUT OC_MACHO_CONTEXT *Context, IN MACH_LOAD_COMMAND_TYPE LoadCommandType, IN CONST MACH_LOAD_COMMAND *LoadCommand OPTIONAL)
BOOLEAN MachoMergeSegments(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *Prefix)
UINT32 MachoGetIndirectSymbolTable64(IN OUT OC_MACHO_CONTEXT *Context, OUT CONST MACH_NLIST_64 **SymbolTable)
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
MACH_NLIST_ANY * SymbolTable
MACH_RELOCATION_INFO * ExternRelocations
MACH_HEADER_ANY * MachHeader
MACH_NLIST_ANY * IndirectSymbolTable
MACH_DYSYMTAB_COMMAND * DySymtab
MACH_RELOCATION_INFO * LocalRelocations
MACH_SYMTAB_COMMAND * Symtab