- Uint32 nameOfs;
- Uint32 value; //Address\r
- Uint32 size;\r
- Uint8 info;\r
- Uint8 other;\r
- Uint16 shndx;\r
-};\r
-#define STN_UNDEF 0 // Undefined Symbol\r
-\r
-enum {\r
- PT_NULL, //0\r
- PT_LOAD, //1\r
- PT_DYNAMIC, //2\r
- PT_INTERP, //3\r
- PT_NOTE, //4\r
- PT_SHLIB, //5\r
- PT_PHDR, //6\r
- PT_LOPROC = 0x70000000,\r
- PT_HIPROC = 0x7fffffff\r
-};\r
-\r
-struct sElf32_Phdr {\r
- Uint32 Type;\r
- Uint Offset;\r
- Uint VAddr;\r
- Uint PAddr;\r
- Uint32 FileSize;\r
- Uint32 MemSize;\r
- Uint32 Flags;\r
- Uint32 Align;\r
-};\r
-\r
-struct elf32_rel_s {\r
- Uint32 r_offset;\r
- Uint32 r_info;\r
-};\r
-\r
-struct elf32_rela_s {\r
- Uint32 r_offset;\r
- Uint32 r_info;\r
- Sint32 r_addend;\r
-};\r
-\r
-enum {\r
- R_386_NONE=0, // none\r
- R_386_32, // S+A\r
- R_386_PC32, // S+A-P\r
- R_386_GOT32, // G+A-P\r
- R_386_PLT32, // L+A-P\r
- R_386_COPY, // none\r
- R_386_GLOB_DAT, // S\r
- R_386_JMP_SLOT, // S\r
- R_386_RELATIVE, // B+A\r
- R_386_GOTOFF, // S+A-GOT\r
- R_386_GOTPC, // GOT+A-P\r
- R_386_LAST // none\r
-};\r
-\r
-#define ELF32_R_SYM(i) ((i)>>8) // Takes an info value and returns a symbol index\r
-#define ELF32_R_TYPE(i) ((i)&0xFF) // Takes an info value and returns a type\r
-#define ELF32_R_INFO(s,t) (((s)<<8)+((t)&0xFF)) // Takes a type and symbol index and returns an info value\r
-\r
-struct elf32_dyn_s {\r
- Uint16 d_tag;\r
- Uint32 d_val; //Also d_ptr\r
-};\r
-\r
-enum {\r
- DT_NULL, //!< Marks End of list\r
- DT_NEEDED, //!< Offset in strtab to needed library\r
- DT_PLTRELSZ, //!< Size in bytes of PLT\r
- DT_PLTGOT, //!< Address of PLT/GOT\r
- DT_HASH, //!< Address of symbol hash table\r
- DT_STRTAB, //!< String Table address\r
- DT_SYMTAB, //!< Symbol Table address\r
- DT_RELA, //!< Relocation table address\r
- DT_RELASZ, //!< Size of relocation table\r
- DT_RELAENT, //!< Size of entry in relocation table\r
- DT_STRSZ, //!< Size of string table\r
- DT_SYMENT, //!< Size of symbol table entry\r
- DT_INIT, //!< Address of initialisation function\r
- DT_FINI, //!< Address of termination function\r
- DT_SONAME, //!< String table offset of so name\r
- DT_RPATH, //!< String table offset of library path\r
- DT_SYMBOLIC,//!< Reverse order of symbol searching for library, search libs first then executable\r
- DT_REL, //!< Relocation Entries (Elf32_Rel instead of Elf32_Rela)\r
- DT_RELSZ, //!< Size of above table (bytes)\r
- DT_RELENT, //!< Size of entry in above table\r
- DT_PLTREL, //!< Relocation entry of PLT\r
- DT_DEBUG, //!< Debugging Entry - Unknown contents\r
- DT_TEXTREL, //!< Indicates that modifcations to a non-writeable segment may occur\r
- DT_JMPREL, //!< Address of PLT only relocation entries\r
- DT_LOPROC = 0x70000000, //!< Low Definable\r
- DT_HIPROC = 0x7FFFFFFF //!< High Definable\r
-};\r
-\r
-typedef struct sElf32_Ehdr Elf32_Ehdr;\r
-typedef struct sElf32_Phdr Elf32_Phdr;\r
-typedef struct sElf32_Shent Elf32_Shent;\r
-typedef struct elf_sym_s elf_symtab;\r
-typedef struct elf_sym_s Elf32_Sym;\r
-typedef struct elf32_rel_s Elf32_Rel;\r
-typedef struct elf32_rela_s Elf32_Rela;\r
-typedef struct elf32_dyn_s Elf32_Dyn;\r
-\r
-#endif // defined(_EXE_ELF_H)\r
+ Elf32_Word nameOfs;
+ Elf32_Addr value; //Address
+ Elf32_Word size;
+ uint8_t info;
+ uint8_t other;
+ Elf32_Half shndx;
+};
+#define STN_UNDEF 0 // Undefined Symbol
+
+enum {
+ PT_NULL, //0
+ PT_LOAD, //1
+ PT_DYNAMIC, //2
+ PT_INTERP, //3
+ PT_NOTE, //4
+ PT_SHLIB, //5
+ PT_PHDR, //6
+ PT_LOPROC = 0x70000000,
+ PT_HIPROC = 0x7fffffff
+};
+
+#define PF_X 1
+#define PF_W 2
+#define PF_R 4
+
+struct sElf32_Phdr {
+ Elf32_Word Type;
+ Elf32_Off Offset;
+ Elf32_Addr VAddr;
+ Elf32_Addr PAddr;
+ Elf32_Word FileSize;
+ Elf32_Word MemSize;
+ Elf32_Word Flags;
+ Elf32_Word Align;
+};
+
+struct elf32_rel_s {
+ Elf32_Addr r_offset;
+ Elf32_Word r_info;
+};
+
+struct elf32_rela_s {
+ Elf32_Addr r_offset;
+ Elf32_Word r_info;
+ Elf32_Sword r_addend;
+};
+
+enum {
+ R_386_NONE=0, // none
+ R_386_32, // S+A
+ R_386_PC32, // S+A-P
+ R_386_GOT32, // G+A-P
+ R_386_PLT32, // L+A-P
+ R_386_COPY, // none
+ R_386_GLOB_DAT, // S
+ R_386_JMP_SLOT, // S
+ R_386_RELATIVE, // B+A
+ R_386_GOTOFF, // S+A-GOT
+ R_386_GOTPC, // GOT+A-P
+ R_386_LAST // none
+};
+
+// NOTES:
+// 'T' means the thumb bit
+// 'B(S)' Origin of a symbol
+enum {
+ R_ARM_NONE, // 0 No action
+ R_ARM_PC24, // 1 ((S + A) | T) - P
+ R_ARM_ABS32, // 2 (S + A) | T
+ R_ARM_REL32, // 3 ((S + A) | T) - P
+ R_ARM_LDR_PC_G0, // 4 S + A - P
+ R_ARM_ABS16, // 5 S + A
+ R_ARM_ABS12, // 6 S + A
+ R_ARM_THM_ABS5, // 7 S + A
+ R_ARM_ABS8, // 8 S + A
+ R_ARM_SBREL32, // 9 ((S + A) | T) - B(S)
+ R_ARM_THM_CALL, // 10 ((S + A) | T) - P
+ R_ARM_THM_PC8, // 11 S + A - Pa,
+ R_ARM_BREL_ADJ, // 12 ΔB(S) + A
+ R_ARM_TLS_DESC, // 13 --
+ R_ARM_THM_SWI8, // 14 (Reserved)
+ R_ARM_XPC25, // 15 (Reserved)
+ R_ARM_THM_XPC22, // 16 (Reserved)
+ R_ARM_TLS_DTPMOD32, // 17 Module[S]
+ R_ARM_TLS_DTPOFF32, // 18 S + A - TLS
+ R_ARM_TLS_TPOFF32, // 19 S + A - tp
+ R_ARM_COPY, // 20 Misc
+ R_ARM_GLOB_DAT, // 21 (S + A) | T
+ R_ARM_JUMP_SLOT, // 22 (S + A) | T
+ R_ARM_RELATIVE, // 23 B(S) + A (extra?)
+ // ... More defined (IHI0044)
+};
+
+#define ELF32_R_SYM(i) ((i)>>8) // Takes an info value and returns a symbol index
+#define ELF32_R_TYPE(i) ((i)&0xFF) // Takes an info value and returns a type
+#define ELF32_R_INFO(s,t) (((s)<<8)+((t)&0xFF)) // Takes a type and symbol index and returns an info value
+
+struct elf32_dyn_s {
+ Elf32_Half d_tag;
+ Elf32_Word d_val; //Also d_ptr
+};
+
+enum {
+ DT_NULL, //!< Marks End of list
+ DT_NEEDED, //!< Offset in strtab to needed library
+ DT_PLTRELSZ, //!< Size in bytes of PLT
+ DT_PLTGOT, //!< Address of PLT/GOT
+ DT_HASH, //!< Address of symbol hash table
+ DT_STRTAB, //!< String Table address
+ DT_SYMTAB, //!< Symbol Table address
+ DT_RELA, //!< Relocation table address
+ DT_RELASZ, //!< Size of relocation table
+ DT_RELAENT, //!< Size of entry in relocation table
+ DT_STRSZ, //!< Size of string table
+ DT_SYMENT, //!< Size of symbol table entry
+ DT_INIT, //!< Address of initialisation function
+ DT_FINI, //!< Address of termination function
+ DT_SONAME, //!< String table offset of so name
+ DT_RPATH, //!< String table offset of library path
+ DT_SYMBOLIC,//!< Reverse order of symbol searching for library, search libs first then executable
+ DT_REL, //!< Relocation Entries (Elf32_Rel instead of Elf32_Rela)
+ DT_RELSZ, //!< Size of above table (bytes)
+ DT_RELENT, //!< Size of entry in above table
+ DT_PLTREL, //!< Relocation entry of PLT
+ DT_DEBUG, //!< Debugging Entry - Unknown contents
+ DT_TEXTREL, //!< Indicates that modifcations to a non-writeable segment may occur
+ DT_JMPREL, //!< Address of PLT only relocation entries
+ DT_LOPROC = 0x70000000, //!< Low Definable
+ DT_HIPROC = 0x7FFFFFFF //!< High Definable
+};
+
+typedef struct sElf32_Ehdr Elf32_Ehdr;
+typedef struct sElf32_Phdr Elf32_Phdr;
+typedef struct sElf32_Shent Elf32_Shent;
+typedef struct elf_sym_s elf_symtab;
+typedef struct elf_sym_s Elf32_Sym;
+typedef struct elf32_rel_s Elf32_Rel;
+typedef struct elf32_rela_s Elf32_Rela;
+typedef struct elf32_dyn_s Elf32_Dyn;
+
+#endif // defined(_EXE_ELF_H)