#ifndef _BIN_ELF_H\r
#define _BIN_ELF_H\r
\r
+typedef Uint16 Elf64_Half;\r
+typedef Uint32 Elf64_Word;\r
+typedef Uint64 Elf64_Addr;\r
+typedef Uint64 Elf64_Off;\r
+typedef Uint64 Elf64_Xword;\r
+\r
+enum e_ident_values\r
+{\r
+ EI_MAG0,\r
+ EI_MAG1,\r
+ EI_MAG2,\r
+ EI_MAG3,\r
+ EI_CLASS,\r
+ EI_DATA,\r
+ EI_VERSION,\r
+ EI_OSABI,\r
+ EI_ABIVERSION,\r
+ EI_PAD,\r
+ EI_NIDENT = 16,\r
+};\r
+\r
+#define ELFCLASS32 1\r
+#define ELFCLASS64 2\r
+\r
/**\r
* \brief ELF File Header\r
*/\r
Uint16 shstrindex; //!< Section Header String Table Index\r
} __attribute__ ((packed));\r
\r
+typedef struct\r
+{\r
+ unsigned char e_ident[16];\r
+ Elf64_Half e_type;\r
+ Elf64_Half e_machine;\r
+ Elf64_Word e_version;\r
+ Elf64_Addr e_entry;\r
+ Elf64_Off e_phoff;\r
+ Elf64_Off e_shoff;\r
+ Elf64_Word e_flags;\r
+ Elf64_Half e_ehsize;\r
+ Elf64_Half e_phentsize;\r
+ Elf64_Half e_phnum;\r
+ Elf64_Half e_shentsize;\r
+ Elf64_Half e_shnum;\r
+ Elf64_Half e_shstrndx;\r
+} Elf64_Ehdr;\r
+\r
/**\r
* \brief Executable Types\r
*/\r
*/\r
#define SHN_UNDEF 0 //!< Undefined Section\r
#define SHN_LORESERVE 0xFF00 //!< Low Reserved\r
-#define SHN_LOPROC 0xFF00 //!< Low Impl Defined\r
-#define SHN_HIPROC 0xFF1F //!< High Impl Defined\r
-#define SHN_ABS 0xFFF1 //!< Absolute Address (Base: 0, Size: -1)\r
-#define SHN_COMMON 0xFFF2 //!< Common\r
+#define SHN_LOPROC 0xFF00 //!< Low Impl Defined\r
+#define SHN_HIPROC 0xFF1F //!< High Impl Defined\r
+#define SHN_ABS 0xFFF1 //!< Absolute Address (Base: 0, Size: -1)\r
+#define SHN_COMMON 0xFFF2 //!< Common\r
#define SHN_HIRESERVE 0xFFFF //!< High Reserved\r
//! \}\r
\r
Uint32 entsize;\r
} __attribute__ ((packed)); //sizeof = 40\r
\r
+typedef struct\r
+{\r
+ Elf64_Word sh_name;\r
+ Elf64_Word sh_type;\r
+ Elf64_Xword sh_flags;\r
+ Elf64_Addr sh_addr;\r
+ Elf64_Off sh_offset;\r
+ Elf64_Xword sh_size;\r
+ Elf64_Word sh_link;\r
+ Elf64_Word sh_info;\r
+ Elf64_Xword sh_addralign;\r
+ Elf64_Xword sh_entsize;\r
+} Elf64_Shdr;\r
+\r
struct elf_sym_s {\r
union {\r
Uint32 nameOfs;\r
\r
struct sElf32_Phdr {\r
Uint32 Type;\r
- Uint Offset;\r
- Uint VAddr;\r
- Uint PAddr;\r
+ Uint32 Offset;\r
+ Uint32 VAddr;\r
+ Uint32 PAddr;\r
Uint32 FileSize;\r
Uint32 MemSize;\r
Uint32 Flags;\r
Uint32 Align;\r
} __attribute__ ((packed));\r
\r
+typedef struct\r
+{\r
+ Elf64_Word p_type;\r
+ Elf64_Word p_flags;\r
+ Elf64_Off p_offset;\r
+ Elf64_Addr p_vaddr;\r
+ Elf64_Addr p_paddr;\r
+ Elf64_Xword p_filesz;\r
+ Elf64_Xword p_memsz;\r
+ Elf64_Xword p_align;\r
+} Elf64_Phdr;\r
+\r
+#define PF_X 1\r
+#define PF_W 2\r
+#define PF_R 4\r
+\r
struct elf32_rel_s {\r
Uint32 r_offset;\r
Uint32 r_info;\r