Skip to content

Commit 9dd641d

Browse files
committed
added ELF enums for Android relocations and special compiler sections
1 parent 1fecc1b commit 9dd641d

File tree

4 files changed

+64
-5
lines changed

4 files changed

+64
-5
lines changed

api/python/ELF/pyEnums.cpp

+15-1
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,10 @@ void init_enums(py::module& m) {
282282
.value(PY_ENUM(ELF_SECTION_TYPES::SHT_GNU_verdef))
283283
.value(PY_ENUM(ELF_SECTION_TYPES::SHT_GNU_verneed))
284284
.value(PY_ENUM(ELF_SECTION_TYPES::SHT_GNU_versym))
285+
.value(PY_ENUM(ELF_SECTION_TYPES::SHT_ANDROID_REL))
286+
.value(PY_ENUM(ELF_SECTION_TYPES::SHT_ANDROID_RELA))
287+
.value(PY_ENUM(ELF_SECTION_TYPES::SHT_LLVM_ADDRSIG))
288+
.value(PY_ENUM(ELF_SECTION_TYPES::SHT_RELR))
285289

286290
.value(PY_ENUM(ELF_SECTION_TYPES::SHT_ARM_EXIDX))
287291
.value(PY_ENUM(ELF_SECTION_TYPES::SHT_ARM_PREEMPTMAP))
@@ -430,7 +434,17 @@ void init_enums(py::module& m) {
430434
.value(PY_ENUM(DYNAMIC_TAGS::DT_MIPS_GP_VALUE))
431435
.value(PY_ENUM(DYNAMIC_TAGS::DT_MIPS_AUX_DYNAMIC))
432436
.value(PY_ENUM(DYNAMIC_TAGS::DT_MIPS_PLTGOT))
433-
.value(PY_ENUM(DYNAMIC_TAGS::DT_MIPS_RWPLT));
437+
.value(PY_ENUM(DYNAMIC_TAGS::DT_MIPS_RWPLT))
438+
.value(PY_ENUM(DYNAMIC_TAGS::DT_ANDROID_REL_OFFSET))
439+
.value(PY_ENUM(DYNAMIC_TAGS::DT_ANDROID_REL_SIZE))
440+
.value(PY_ENUM(DYNAMIC_TAGS::DT_ANDROID_REL))
441+
.value(PY_ENUM(DYNAMIC_TAGS::DT_ANDROID_RELSZ))
442+
.value(PY_ENUM(DYNAMIC_TAGS::DT_ANDROID_RELA))
443+
.value(PY_ENUM(DYNAMIC_TAGS::DT_ANDROID_RELASZ))
444+
.value(PY_ENUM(DYNAMIC_TAGS::DT_RELR))
445+
.value(PY_ENUM(DYNAMIC_TAGS::DT_RELRSZ))
446+
.value(PY_ENUM(DYNAMIC_TAGS::DT_RELRENT))
447+
.value(PY_ENUM(DYNAMIC_TAGS::DT_RELRCOUNT));
434448

435449

436450
LIEF::enum_<ELF_SYMBOL_TYPES>(m, "SYMBOL_TYPES")

include/LIEF/ELF/enums.inc

+17-1
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,10 @@ enum _LIEF_EN(ELF_SECTION_TYPES) {
460460
_LIEF_EI(SHT_GROUP) = 17, /**< Section group. */
461461
_LIEF_EI(SHT_SYMTAB_SHNDX) = 18, /**< Indices for SHN_XINDEX entries. */
462462
_LIEF_EI(SHT_LOOS) = 0x60000000, /**< Lowest operating system-specific type. */
463+
_LIEF_EI(SHT_ANDROID_REL) = 0x60000001, /**< Packed relocations (Android specific). */
464+
_LIEF_EI(SHT_ANDROID_RELA) = 0x60000002, /**< Packed relocations (Android specific). */
465+
_LIEF_EI(SHT_LLVM_ADDRSIG) = 0x6fff4c03, /**< This section is used to mark symbols as address-significant. */
466+
_LIEF_EI(SHT_RELR) = 0x6fffff00, /**< New relr relocations (Android specific). */
463467
_LIEF_EI(SHT_GNU_ATTRIBUTES) = 0x6ffffff5, /**< Object attributes. */
464468
_LIEF_EI(SHT_GNU_HASH) = 0x6ffffff6, /**< GNU-style hash table. */
465469
_LIEF_EI(SHT_GNU_verdef) = 0x6ffffffd, /**< GNU version definitions. */
@@ -734,7 +738,19 @@ enum _LIEF_EN(DYNAMIC_TAGS) {
734738
_LIEF_EI(DT_MIPS_GP_VALUE) = 0x70000030, /**< GP value for auxiliary GOTs. */
735739
_LIEF_EI(DT_MIPS_AUX_DYNAMIC) = 0x70000031, /**< Address of auxiliary .dynamic. */
736740
_LIEF_EI(DT_MIPS_PLTGOT) = 0x70000032, /**< Address of the base of the PLTGOT. */
737-
_LIEF_EI(DT_MIPS_RWPLT) = 0x70000034 /**< Points to the base of a writable PLT. */
741+
_LIEF_EI(DT_MIPS_RWPLT) = 0x70000034, /**< Points to the base of a writable PLT. */
742+
743+
/* Android specific dynamic table entry tags. */
744+
_LIEF_EI(DT_ANDROID_REL_OFFSET) = 0x6000000D, /**< The offset of packed relocation data (older version < M) (Android specific). */
745+
_LIEF_EI(DT_ANDROID_REL_SIZE) = 0x6000000E, /**< The size of packed relocation data in bytes (older version < M) (Android specific). */
746+
_LIEF_EI(DT_ANDROID_REL) = 0x6000000F, /**< The offset of packed relocation data (Android specific). */
747+
_LIEF_EI(DT_ANDROID_RELSZ) = 0x60000010, /**< The size of packed relocation data in bytes (Android specific). */
748+
_LIEF_EI(DT_ANDROID_RELA) = 0x60000011, /**< The offset of packed relocation data (Android specific). */
749+
_LIEF_EI(DT_ANDROID_RELASZ) = 0x60000012, /**< The size of packed relocation data in bytes (Android specific). */
750+
_LIEF_EI(DT_RELR) = 0x6FFFE000, /**< The offset of new relr relocation data (Android specific). */
751+
_LIEF_EI(DT_RELRSZ) = 0x6FFFE001, /**< The size of nre relr relocation data in bytes (Android specific). */
752+
_LIEF_EI(DT_RELRENT) = 0x6FFFE003, /**< The size of a new relr relocation entry (Android specific). */
753+
_LIEF_EI(DT_RELRCOUNT) = 0x6FFFE005 /**< Specifies the relative count of new relr relocation entries (Android specific). */
738754
};
739755

740756
/** DT_FLAGS and DT_FLAGS_1 values. */

include/LIEF/ELF/undef.h

+15
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,10 @@
400400
#undef SHT_LOUSER
401401
#undef SHT_HIUSER
402402

403+
#undef SHT_ANDROID_REL
404+
#undef SHT_ANDROID_RELA
405+
#undef SHT_LLVM_ADDRSIG
406+
#undef SHT_RELR
403407

404408
#undef SHF_NONE
405409
#undef SHF_WRITE
@@ -592,6 +596,17 @@
592596
#undef DT_MIPS_PLTGOT
593597
#undef DT_MIPS_RWPLT
594598

599+
#undef DT_ANDROID_REL_OFFSET
600+
#undef DT_ANDROID_REL_SIZE
601+
#undef DT_ANDROID_REL
602+
#undef DT_ANDROID_RELSZ
603+
#undef DT_ANDROID_RELA
604+
#undef DT_ANDROID_RELASZ
605+
#undef DT_RELR
606+
#undef DT_RELRSZ
607+
#undef DT_RELRENT
608+
#undef DT_RELRCOUNT
609+
595610
#undef DF_ORIGIN
596611
#undef DF_SYMBOLIC
597612
#undef DF_TEXTREL

src/ELF/EnumToString.cpp

+17-3
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ const char* to_string(SEGMENT_TYPES e) {
275275
}
276276

277277
const char* to_string(DYNAMIC_TAGS e) {
278-
CONST_MAP(DYNAMIC_TAGS, const char*, 87) enumStrings {
278+
CONST_MAP(DYNAMIC_TAGS, const char*, 97) enumStrings {
279279
{ DYNAMIC_TAGS::DT_NULL, "NULL"},
280280
{ DYNAMIC_TAGS::DT_NEEDED, "NEEDED"},
281281
{ DYNAMIC_TAGS::DT_PLTRELSZ, "PLTRELSZ"},
@@ -363,15 +363,25 @@ const char* to_string(DYNAMIC_TAGS e) {
363363
{ DYNAMIC_TAGS::DT_MIPS_GP_VALUE, "MIPS_GP_VALUE"},
364364
{ DYNAMIC_TAGS::DT_MIPS_AUX_DYNAMIC, "MIPS_AUX_DYNAMIC"},
365365
{ DYNAMIC_TAGS::DT_MIPS_PLTGOT, "MIPS_PLTGOT"},
366-
{ DYNAMIC_TAGS::DT_MIPS_RWPLT, "MIPS_RWPLT"}
366+
{ DYNAMIC_TAGS::DT_MIPS_RWPLT, "MIPS_RWPLT"},
367+
{ DYNAMIC_TAGS::DT_ANDROID_REL_OFFSET, "ANDROID_REL_OFFSET"},
368+
{ DYNAMIC_TAGS::DT_ANDROID_REL_SIZE, "ANDROID_REL_SIZE"},
369+
{ DYNAMIC_TAGS::DT_ANDROID_REL, "ANDROID_REL"},
370+
{ DYNAMIC_TAGS::DT_ANDROID_RELSZ, "ANDROID_RELSZ"},
371+
{ DYNAMIC_TAGS::DT_ANDROID_RELA, "ANDROID_RELA"},
372+
{ DYNAMIC_TAGS::DT_ANDROID_RELASZ, "ANDROID_RELASZ"},
373+
{ DYNAMIC_TAGS::DT_RELR, "RELR"},
374+
{ DYNAMIC_TAGS::DT_RELRSZ, "RELRSZ"},
375+
{ DYNAMIC_TAGS::DT_RELRENT, "RELRENT"},
376+
{ DYNAMIC_TAGS::DT_RELRCOUNT, "RELRCOUNT"}
367377
};
368378
auto it = enumStrings.find(e);
369379
return it == enumStrings.end() ? "UNDEFINED" : it->second;
370380
}
371381

372382

373383
const char* to_string(ELF_SECTION_TYPES e) {
374-
CONST_MAP(ELF_SECTION_TYPES, const char*, 35) enumStrings {
384+
CONST_MAP(ELF_SECTION_TYPES, const char*, 39) enumStrings {
375385
{ ELF_SECTION_TYPES::SHT_NULL, "NULL"},
376386
{ ELF_SECTION_TYPES::SHT_PROGBITS, "PROGBITS"},
377387
{ ELF_SECTION_TYPES::SHT_SYMTAB, "SYMTAB"},
@@ -390,6 +400,10 @@ const char* to_string(ELF_SECTION_TYPES e) {
390400
{ ELF_SECTION_TYPES::SHT_GROUP, "GROUP"},
391401
{ ELF_SECTION_TYPES::SHT_SYMTAB_SHNDX, "SYMTAB_SHNDX"},
392402
{ ELF_SECTION_TYPES::SHT_LOOS, "LOOS"},
403+
{ ELF_SECTION_TYPES::SHT_ANDROID_REL, "ANDROID_REL"},
404+
{ ELF_SECTION_TYPES::SHT_ANDROID_RELA, "ANDROID_RELA"},
405+
{ ELF_SECTION_TYPES::SHT_LLVM_ADDRSIG, "LLVM_ADDRSIG"},
406+
{ ELF_SECTION_TYPES::SHT_RELR, "RELR"},
393407
{ ELF_SECTION_TYPES::SHT_GNU_ATTRIBUTES, "GNU_ATTRIBUTES"},
394408
{ ELF_SECTION_TYPES::SHT_GNU_HASH, "GNU_HASH"},
395409
{ ELF_SECTION_TYPES::SHT_GNU_verdef, "GNU_VERDEF"},

0 commit comments

Comments
 (0)