#define PACKED __attribute__((packed)) #define TYPE_EMPTY "00000000-0000-0000-0000-000000000000" #define TYPE_SYSTEM "C12A7328-F81F-11D2-BA4B-00A0C93EC93B" typedef PACKED struct { uint8_t d[16]; } GUID; #define GPT_ENTRY_FLAG_SYSTEM 1 typedef PACKED struct { GUID type; GUID label; uint64_t start; uint64_t end; uint64_t flags; uint8_t name[72]; } GPT_entry; #define GPT_HEADER_SIGNATURE "EFI PART" #define GPT_HEADER_REVISION_EFI10 0x00010000 typedef PACKED struct { uint8_t signature[8]; uint32_t revision; uint32_t header_size; uint32_t header_crc; uint8_t reserved[20]; uint64_t my_lba; uint64_t alternate_lba; uint64_t first_usable_lba; uint64_t last_usable_lba; GUID disk_guid; uint64_t partition_entry_lba; uint32_t n_partition_entries; uint32_t partition_entry_size; uint32_t partition_entry_crc; } GPT_header; #define MBR_PARTITION_TYPE_EFI 0xee #define MBR_PARTITION_BOOTABLE 0x80 typedef PACKED struct { uint8_t head; uint8_t sector; uint8_t track; } CHS; typedef PACKED struct { uint8_t bootable; CHS chs_start; uint8_t system; CHS chs_end; uint32_t start; uint32_t size; } MBR_entry; typedef PACKED struct { uint8_t boot_code[440]; uint8_t uid[4]; uint8_t reserved[2]; MBR_entry entry[4]; uint8_t signature[2]; } MBR;