1 // copyright (c) 2017-2021 hors<horsicq@gmail.com> 2 // 3 // Permission is hereby granted, free of charge, to any person obtaining a copy 4 // of this software and associated documentation files (the "Software"), to deal 5 // in the Software without restriction, including without limitation the rights 6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 // copies of the Software, and to permit persons to whom the Software is 8 // furnished to do so, subject to the following conditions: 9 10 // The above copyright notice and this permission notice shall be included in all 11 // copies or substantial portions of the Software. 12 13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 // SOFTWARE. 20 // 21 #ifndef ELF_DEFS_H 22 #define ELF_DEFS_H 23 24 #include "../formatwidget.h" 25 #include "xelf.h" 26 27 namespace SELF 28 { 29 enum TYPE 30 { 31 TYPE_HEX=0, 32 TYPE_DISASM, 33 TYPE_HASH, 34 TYPE_STRINGS, 35 TYPE_SIGNATURES, 36 TYPE_MEMORYMAP, 37 TYPE_ENTROPY, 38 TYPE_HEURISTICSCAN, 39 TYPE_Elf_Ehdr, 40 TYPE_Elf_Shdr, 41 TYPE_Elf_Phdr, 42 TYPE_Elf_DynamicArrayTags, 43 TYPE_LIBRARIES, 44 TYPE_INTERPRETER, 45 TYPE_NOTES, 46 TYPE_RUNPATH, 47 TYPE_STRINGTABLE, 48 TYPE_SYMBOLTABLE, 49 TYPE_Elf_Rela, 50 TYPE_Elf_Rel, 51 __TYPE_size 52 }; 53 } 54 55 namespace N_Elf_Ehdr 56 { 57 enum DATA 58 { 59 ei_mag=0, 60 ei_class, 61 ei_data, 62 ei_version, 63 ei_osabi, 64 ei_abiversion, 65 ei_pad_0, 66 ei_pad_1, 67 ei_pad_2, 68 ei_pad_3, 69 ei_pad_4, 70 ei_pad_5, 71 ei_pad_6, 72 e_type, 73 e_machine, 74 e_version, 75 e_entry, 76 e_phoff, 77 e_shoff, 78 e_flags, 79 e_ehsize, 80 e_phentsize, 81 e_phnum, 82 e_shentsize, 83 e_shnum, 84 e_shstrndx, 85 __data_size 86 }; 87 88 extern const FW_DEF::HEADER_RECORD records32[__data_size]; 89 extern const FW_DEF::HEADER_RECORD records64[__data_size]; 90 } 91 92 namespace N_Elf_Shdr 93 { 94 enum DATA 95 { 96 sh_name=0, 97 sh_type, 98 sh_flags, 99 sh_addr, 100 sh_offset, 101 sh_size, 102 sh_link, 103 sh_info, 104 sh_addralign, 105 sh_entsize, 106 __data_size 107 }; 108 109 extern const FW_DEF::HEADER_RECORD records32[__data_size]; 110 extern const FW_DEF::HEADER_RECORD records64[__data_size]; 111 112 enum CB 113 { 114 CB_TYPE=0, 115 CB_FLAGS, 116 __CB_size 117 }; 118 119 enum INV 120 { 121 INV_VirtualAddress, 122 INV_PointerToRawData, 123 __INV_size 124 }; 125 } 126 127 namespace N_Elf_Phdr32 128 { 129 enum DATA 130 { 131 p_type=0, 132 p_offset, 133 p_vaddr, 134 p_paddr, 135 p_filesz, 136 p_memsz, 137 p_flags, 138 p_align, 139 __data_size 140 }; 141 142 extern const FW_DEF::HEADER_RECORD records[__data_size]; 143 144 enum CB 145 { 146 CB_TYPE=0, 147 CB_FLAGS, 148 __CB_size 149 }; 150 151 enum INV 152 { 153 INV_VirtualAddress, 154 INV_PointerToRawData, 155 __INV_size 156 }; 157 } 158 159 namespace N_Elf_Phdr64 160 { 161 enum DATA 162 { 163 p_type=0, 164 p_flags, 165 p_offset, 166 p_vaddr, 167 p_paddr, 168 p_filesz, 169 p_memsz, 170 p_align, 171 __data_size 172 }; 173 174 extern const FW_DEF::HEADER_RECORD records[__data_size]; 175 } 176 177 namespace N_Elf_DynamicArrayTags 178 { 179 enum DATA 180 { 181 d_tag=0, 182 d_value, 183 __data_size 184 }; 185 186 extern const FW_DEF::HEADER_RECORD records32[__data_size]; 187 extern const FW_DEF::HEADER_RECORD records64[__data_size]; 188 189 enum CB 190 { 191 CB_TAG=0, 192 __CB_size 193 }; 194 195 enum INV 196 { 197 INV_VirtualAddress, 198 INV_PointerToRawData, 199 __INV_size 200 }; 201 } 202 203 namespace N_ELF_LIBRARIES 204 { 205 enum DATA 206 { 207 library_name=0, 208 __data_size 209 }; 210 211 extern const FW_DEF::HEADER_RECORD records[__data_size]; 212 } 213 214 namespace N_ELF_INTERPRETER 215 { 216 enum DATA 217 { 218 interpreter=0, 219 __data_size 220 }; 221 222 extern const FW_DEF::HEADER_RECORD records[__data_size]; 223 } 224 225 namespace N_ELF_NOTES 226 { 227 enum DATA 228 { 229 type=0, 230 name, 231 __data_size 232 }; 233 234 extern const FW_DEF::HEADER_RECORD records[__data_size]; 235 } 236 237 namespace N_ELF_RUNPATH 238 { 239 enum DATA 240 { 241 runpath=0, 242 __data_size 243 }; 244 245 extern const FW_DEF::HEADER_RECORD records[__data_size]; 246 } 247 248 namespace N_Elf32_Sym 249 { 250 enum DATA 251 { 252 st_name=0, 253 st_value, 254 st_size, 255 st_info, 256 st_other, 257 st_shndx, 258 __data_size 259 }; 260 261 extern const FW_DEF::HEADER_RECORD records[__data_size]; 262 263 enum CB 264 { 265 __CB_size 266 }; 267 268 enum INV 269 { 270 __INV_size 271 }; 272 } 273 274 namespace N_Elf64_Sym 275 { 276 enum DATA 277 { 278 st_name, 279 st_info, 280 st_other, 281 st_shndx, 282 st_value, 283 st_size, 284 __data_size 285 }; 286 287 extern const FW_DEF::HEADER_RECORD records[__data_size]; 288 } 289 290 namespace N_Elf_Rela 291 { 292 enum DATA 293 { 294 r_offset, 295 r_info, 296 r_addend, 297 __data_size 298 }; 299 300 extern const FW_DEF::HEADER_RECORD records32[__data_size]; 301 extern const FW_DEF::HEADER_RECORD records64[__data_size]; 302 303 enum CB 304 { 305 __CB_size 306 }; 307 308 enum INV 309 { 310 __INV_size 311 }; 312 } 313 314 namespace N_Elf_Rel 315 { 316 enum DATA 317 { 318 r_offset, 319 r_info, 320 __data_size 321 }; 322 323 extern const FW_DEF::HEADER_RECORD records32[__data_size]; 324 extern const FW_DEF::HEADER_RECORD records64[__data_size]; 325 326 enum CB 327 { 328 __CB_size 329 }; 330 331 enum INV 332 { 333 __INV_size 334 }; 335 } 336 337 #endif // ELF_DEFS_H 338