public const UInt32 FAT_CIGAM = 0xBEBAFECA; // For little Endian. protected void Read(ReadingContext SR) { // Read the header to see if it is a FAT Binary or not. SR.bStreamLittleEndian = false; Magic = SR.ReadUInt32(); bIsFatBinary = (Magic == FAT_MAGIC); if (bIsFatBinary) { Archs = new List<FatBinaryArch>(); NumArchs = SR.ReadUInt32(); for (int ArchIdx = 0; ArchIdx < NumArchs; ArchIdx++) { SR.bStreamLittleEndian = false; FatBinaryArch Arch = new FatBinaryArch(); Arch.CpuType = SR.ReadUInt32(); Arch.CpuSubType = SR.ReadUInt32(); Arch.Offset = SR.ReadUInt32(); Arch.Size = SR.ReadUInt32(); Arch.Align = SR.ReadUInt32(); Archs.Add(Arch); MachObjectFile Exe = new MachObjectFile(); SR.bStreamLittleEndian = true; SR.OpenFatArchiveAt(Arch.Offset); Exe.Read(SR); SR.CloseFatArchive(); MachObjectFiles.Add(Exe); } SR.bStreamLittleEndian = true; } else { SR.bStreamLittleEndian = true; MachObjectFile Exe = new MachObjectFile(); SR.Position = 0; Exe.Read(SR); MachObjectFiles.Add(Exe); } }