UEFI notes ========== /efi/boot/bootx64.efi rcx: efi handle rdx: efi system table pointer rsp: return address? after loading call EFI_BOOT_SERVICES.ExitBootServices() struct EFI_TABLE_HEADER { uint64_t signature; uint32_t revision; uint32_t header_size; uint32_t crc32; uint32_t rsvd; }; EFI_SYSTEM_TABLE signature: 0x5453595320494249 0 EFI_TABLE_HEADER 24 wchar_t *firmware_vendor 32 uint32_t firmware_revision 36 padding 40 void *console_in_handle 48 EFI_SIMPLE_TEXT_INPUT_PROTOCOL* 56 void *console_out_handle 64 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL* 72 void *stderr_handle 80 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL* 88 EFI_RUNTIME_SERVICES *runtime_services; 96 EFI_BOOT_SERVICES *boot_services; uint64_t num_of_table_entries; EFI_CONFIGURATION_TABLE *cfg_table; EFI_BOOT_SERVICES signature: 0x56524553544f4f42 0 EFI_TABLE_HEADER 24 EFI_RAISE_TPL 32 EFI_RESTORE_TPL 40 EFI_ALLOCATE_PAGES 48 EFI_FREE_PAGES 56 EFI_GET_MEMORY_MAP 64 EFI_ALLOCATE_POOL 72 EFI_FREE_POOL 80 EFI_CREATE_EVENT 88 EFI_SET_TIMER 96 EFI_WAIT_FOR_EVENT 104 EFI_SIGNAL_EVENT 112 EFI_CLOSE_EVENT 120 EFI_CHECK_EVENT 128 EFI_INSTALL_PROTOCOL_INTERFACE 136 EFI_REINSTALL_PROTOCOL_INTERFACE 144 EFI_UNINSTALL_PROTOCOL_INTERFACE 152 EFI_HANDLE_PROTOCOL 160 void *rsvd 168 EFI_REGISTER_PROTOCOL_NOTIFY 176 EFI_LOCATE_HANDLE 184 EFI_LOCATE_DEVICE_PATH 192 EFI_INSTALL_CONFIGURATION_TABLE 200 EFI_IMAGE_LOAD 208 EFI_IMAGE_START 216 EFI_EXIT 224 EFI_IMAGE_UNLOAD 232 EFI_EXIT_BOOT_SERVICES ... more ... EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL { 0 EFI_TEXT_RESET 8 EFI_TEXT_STRING 16 EFI_TEXT_TEST_STRING 24 EFI_TEXT_QUERY_MODE 32 EFI_TEXT_SET_MODE 40 EFI_TEXT_SET_ATTRIBUTE 48 EFI_TEXT_CLEAR_SCREEN 56 EFI_TEXT_SET_CURSOR_POSITION 64 EFI_TEXT_ENABLE_CURSOR 72 SIMPLE_TEXT_OUPUT_MODE *mode; };