pe-binary: add helper pe_is_addon() for detecting whether we are looking at PE EFI add-on
This commit is contained in:
@@ -240,3 +240,17 @@ bool pe_is_uki(const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections)
|
||||
pe_header_find_section(pe_header, sections, ".osrel") &&
|
||||
pe_header_find_section(pe_header, sections, ".linux");
|
||||
}
|
||||
|
||||
bool pe_is_addon(const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections) {
|
||||
assert(pe_header);
|
||||
assert(sections || le16toh(pe_header->pe.NumberOfSections) == 0);
|
||||
|
||||
if (le16toh(pe_header->optional.Subsystem) != IMAGE_SUBSYSTEM_EFI_APPLICATION)
|
||||
return false;
|
||||
|
||||
/* Add-ons do not have a Linux kernel, but do have either .cmdline or .dtb (currently) */
|
||||
return !pe_header_find_section(pe_header, sections, ".linux") &&
|
||||
(pe_header_find_section(pe_header, sections, ".cmdline") ||
|
||||
pe_header_find_section(pe_header, sections, ".dtb") ||
|
||||
pe_header_find_section(pe_header, sections, ".ucode"));
|
||||
}
|
||||
|
||||
@@ -142,3 +142,4 @@ int pe_load_sections(int fd, const IMAGE_DOS_HEADER *dos_header, const PeHeader
|
||||
int pe_read_section_data(int fd, const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections, const char *name, size_t max_size, void **ret, size_t *ret_size);
|
||||
|
||||
bool pe_is_uki(const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections);
|
||||
bool pe_is_addon(const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections);
|
||||
|
||||
Reference in New Issue
Block a user