mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
pe-binary: add pe_is_native() for checking if PE is native
This commit is contained in:
@@ -31,3 +31,25 @@ static inline bool unified_section_measure(UnifiedSection section) {
|
||||
|
||||
/* Max number of profiles per UKI */
|
||||
#define UNIFIED_PROFILES_MAX 256U
|
||||
|
||||
/* The native PE machine type, if known, for a full list see:
|
||||
* https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#machine-types */
|
||||
#ifndef _IMAGE_FILE_MACHINE_NATIVE
|
||||
# if defined(__x86_64__)
|
||||
# define _IMAGE_FILE_MACHINE_NATIVE UINT16_C(0x8664)
|
||||
# elif defined(__i386__)
|
||||
# define _IMAGE_FILE_MACHINE_NATIVE UINT16_C(0x014c)
|
||||
# elif defined(__ia64__)
|
||||
# define _IMAGE_FILE_MACHINE_NATIVE UINT16_C(0x0200)
|
||||
# elif defined(__aarch64__)
|
||||
# define _IMAGE_FILE_MACHINE_NATIVE UINT16_C(0xaa64)
|
||||
# elif defined(__arm__)
|
||||
# define _IMAGE_FILE_MACHINE_NATIVE UINT16_C(0x01c0)
|
||||
# elif defined(__riscv)
|
||||
# if __SIZEOF_POINTER__ == 4
|
||||
# define _IMAGE_FILE_MACHINE_NATIVE UINT16_C(0x5032)
|
||||
# elif __SIZEOF_POINTER__ == 8
|
||||
# define _IMAGE_FILE_MACHINE_NATIVE UINT16_C(0x5064)
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "log.h"
|
||||
#include "pe-binary.h"
|
||||
#include "string-util.h"
|
||||
#include "uki.h"
|
||||
|
||||
bool pe_header_is_64bit(const PeHeader *h) {
|
||||
assert(h);
|
||||
@@ -273,3 +274,13 @@ bool pe_is_addon(const PeHeader *pe_header, const IMAGE_SECTION_HEADER *sections
|
||||
pe_header_find_section(pe_header, sections, ".dtb") ||
|
||||
pe_header_find_section(pe_header, sections, ".ucode"));
|
||||
}
|
||||
|
||||
bool pe_is_native(const PeHeader *pe_header) {
|
||||
assert(pe_header);
|
||||
|
||||
#ifdef _IMAGE_FILE_MACHINE_NATIVE
|
||||
return le16toh(pe_header->pe.Machine) == _IMAGE_FILE_MACHINE_NATIVE;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -145,3 +145,5 @@ int pe_read_section_data_by_name(int fd, const PeHeader *pe_header, const IMAGE_
|
||||
|
||||
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);
|
||||
|
||||
bool pe_is_native(const PeHeader *pe_header);
|
||||
|
||||
Reference in New Issue
Block a user