Added elf_o module

This commit is contained in:
Jozef Nagy
2024-01-10 17:40:59 +01:00
parent 53cd4e0052
commit 5dfa8aeac4
5 changed files with 559 additions and 0 deletions

View File

@@ -606,4 +606,114 @@ typedef struct _PECOFF_IMAGE_RESOURCE_DATA_ENTRY
ULONG Reserved;
} PECOFF_IMAGE_RESOURCE_DATA_ENTRY, *PPECOFF_IMAGE_RESOURCE_DATA_ENTRY;
/* TODO: Name these enumerations */
typedef enum _ELF_IDENT
{
EI_MAG0 = 0,
EI_MAG1 = 1,
EI_MAG2 = 2,
EI_MAG3 = 3,
EI_CLASS = 4,
EI_DATA = 5,
EI_VERSION = 6,
EI_OSABI = 7,
EI_ABIVERSION = 8
} ELF_IDENT;
typedef enum _ELF_PT
{
PT_NULL = 0,
PT_LOAD = 1,
PT_DYNAMIC = 2,
PT_INTERP = 3,
PT_NOTE = 4,
PT_SHLIB = 5,
PT_PHDR = 6,
PT_TLS = 7
} ELF_PT;
/* ELF image representation structure */
typedef struct _ELF_IMAGE_CONTEXT
{
union
{
PELF32_HEADER Header32;
PELF64_HEADER Header64;
};
PVOID Data;
PVOID EntryPoint;
UINT64 FileSize;
UINT ImagePages;
UINT ImageSize;
LOADER_MEMORY_TYPE MemoryType;
PVOID PhysicalAddress;
PVOID VirtualAddress;
} ELF_IMAGE_CONTEXT, *PELF_IMAGE_CONTEXT;
/* 32-bit ELF image header structure */
typedef struct _ELF32_HEADER
{
/* NOTE: EI_NIDENT seems to always be defined as 16. */
UCHAR e_ident[16];
UINT16 e_type;
UINT16 e_machine;
UINT32 e_version;
UINT32 e_entry;
UINT32 e_phoff;
UINT32 e_shoff;
UINT32 e_flags;
UINT16 e_ehsize;
UINT16 e_phentsize;
UINT16 e_phnum;
UINT16 e_shentsize;
UINT16 e_shnum;
UINT16 e_shstrndx;
} ELF32_HEADER, *PELF32_HEADER;
/* 64-bit ELF image header structure */
typedef struct _ELF64_HEADER
{
/* NOTE: EI_NIDENT seems to always be defined as 16. */
UCHAR e_ident[16];
UINT16 e_type;
UINT16 e_machine;
UINT32 e_version;
ULONG e_entry;
ULONG e_phoff;
ULONG e_shoff;
UINT32 e_flags;
UINT16 e_ehsize;
UINT16 e_phentsize;
UINT16 e_phnum;
UINT16 e_shentsize;
UINT16 e_shnum;
UINT16 e_shstrndx;
} ELF64_HEADER, *PELF64_HEADER;
/* 32-bit ELF program header structure */
typedef struct _ELF32_PROGRAM_HEADER
{
UINT32 p_type;
UINT32 p_offset;
UINT32 p_vaddr;
UINT32 p_paddr;
UINT32 p_filesz;
UINT32 p_memsz;
UINT32 p_flags;
UINT32 p_align;
} ELF32_PROGRAM_HEADER, *PELF32_PROGRAM_HEADER;
/* 64-bit ELF program header structure */
typedef struct _ELF64_PROGRAM_HEADER
{
UINT32 p_type;
UINT32 p_flags;
ULONG p_offset;
ULONG p_vaddr;
ULONG p_paddr;
ULONG p_filesz;
ULONG p_memsz;
ULONG p_align;
} ELF64_PROGRAM_HEADER, *PELF64_PROGRAM_HEADER;
#endif /* __XTDK_XTIMAGE_H */