Value | Meaning |
---|---|
MH_OBJECT | Relocatable object file. |
MH_EXECUTE | Demand paged executable file. |
MH_FVMLIB | Fixed VM shared library file. |
MH_CORE | Core file. |
MH_PRELOAD | Preloaded executable file. |
MH_DYLIB | Dynamically bound shared library. |
MH_DYLINKER | Dynamic link editor. |
MH_BUNDLE | Dynamically bound bundle file. |
MH_DYLIB_STUB | Shared library stub for static linking only, no section contents. |
MH_DSYM | Companion file with only debug sections. |
MH_KEXT_BUNDLE | X86_64 kexts. |
The layout of the file depends on the filetype. For all but the MH_OBJECT file type the segments are padded out and aligned on a segment alignment boundary for efficient demand pageing. The MH_EXECUTE, MH_FVMLIB, MH_DYLIB, MH_DYLINKER and MH_BUNDLE file types also have the headers included as part of their first segment.
The file type MH_OBJECT is a compact format intended as output of the assembler and input (and possibly output) of the link editor (the .o format). All sections are in one unnamed segment with no segment padding. This format is used as an executable format when the file is so small the segment padding greatly increases its size.
The file type MH_PRELOAD is an executable format intended for things that are not executed under the kernel (proms, stand alones, kernels, etc). The format can be executed under the kernel but may demand paged it and not preload it before execution.
A core file is in MH_CORE format and can be any in an arbitrary legal Mach-O file.
Constants for the filetype field of the mach_header