Enhance LIEF's ELF header

API Changes (Python / C++):
  * lief.ELF.Header.{arm_flags_list, mips_flags_list, ppc64_flags_list, hexagon_flags_list} - Added

In python, one can do:
`` if lief.ELF.ARM_EFLAGS.EABI_VER5 in lief.ELF.Header: ...``

In C++ we added:
  * LIEF::ELF::Header::has(ARM_EFLAGS, PPC64_EFLAGS, MIPS_EFLAGS...)
This commit is contained in:
Romain Thomas
2017-08-01 09:35:55 +02:00
parent 45398952e1
commit 730d045e05
10 changed files with 714 additions and 163 deletions
+76
View File
@@ -913,4 +913,80 @@ void init_ELF_Structures_enum(py::module& m) {
.value(PY_ENUM(RELOCATION_PURPOSES::RELOC_PURPOSE_DYNAMIC))
.value(PY_ENUM(RELOCATION_PURPOSES::RELOC_PURPOSE_OBJECT))
.export_values();
py::enum_<ARM_EFLAGS>(m, "ARM_EFLAGS")
.value(PY_ENUM(ARM_EFLAGS::EF_ARM_SOFT_FLOAT))
.value(PY_ENUM(ARM_EFLAGS::EF_ARM_VFP_FLOAT))
.value(PY_ENUM(ARM_EFLAGS::EF_ARM_EABI_UNKNOWN))
.value(PY_ENUM(ARM_EFLAGS::EF_ARM_EABI_VER1))
.value(PY_ENUM(ARM_EFLAGS::EF_ARM_EABI_VER2))
.value(PY_ENUM(ARM_EFLAGS::EF_ARM_EABI_VER3))
.value(PY_ENUM(ARM_EFLAGS::EF_ARM_EABI_VER4))
.value(PY_ENUM(ARM_EFLAGS::EF_ARM_EABI_VER5))
.export_values();
py::enum_<PPC64_EFLAGS>(m, "PPC64_EFLAGS")
.value(PY_ENUM(PPC64_EFLAGS::EF_PPC64_ABI))
.export_values();
py::enum_<MIPS_EFLAGS>(m, "MIPS_EFLAGS")
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_NOREORDER))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_PIC))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_CPIC))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ABI2))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_32BITMODE))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_FP64))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_NAN2008))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ABI_O32))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ABI_O64))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ABI_EABI32))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ABI_EABI64))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_3900))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_4010))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_4100))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_4650))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_4120))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_4111))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_SB1))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_OCTEON))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_XLR))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_OCTEON2))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_OCTEON3))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_5400))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_5900))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_5500))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_9000))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_LS2E))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_LS2F))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MACH_LS3A))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_MICROMIPS))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_ASE_M16))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_ASE_MDMX))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_1))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_2))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_3))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_4))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_5))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_32))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_64))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_32R2))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_64R2))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_32R6))
.value(PY_ENUM(MIPS_EFLAGS::EF_MIPS_ARCH_64R6))
.export_values();
py::enum_<HEXAGON_EFLAGS>(m, "HEXAGON_EFLAGS")
.value(PY_ENUM(HEXAGON_EFLAGS::EF_HEXAGON_MACH_V2))
.value(PY_ENUM(HEXAGON_EFLAGS::EF_HEXAGON_MACH_V3))
.value(PY_ENUM(HEXAGON_EFLAGS::EF_HEXAGON_MACH_V4))
.value(PY_ENUM(HEXAGON_EFLAGS::EF_HEXAGON_MACH_V5))
.value(PY_ENUM(HEXAGON_EFLAGS::EF_HEXAGON_ISA_MACH))
.value(PY_ENUM(HEXAGON_EFLAGS::EF_HEXAGON_ISA_V2))
.value(PY_ENUM(HEXAGON_EFLAGS::EF_HEXAGON_ISA_V3))
.value(PY_ENUM(HEXAGON_EFLAGS::EF_HEXAGON_ISA_V4))
.value(PY_ENUM(HEXAGON_EFLAGS::EF_HEXAGON_ISA_V5))
.export_values();
}