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
+47
View File
@@ -102,6 +102,30 @@ void init_ELF_Header_class(py::module& m) {
static_cast<getter_t<uint32_t>>(&Header::processor_flag),
static_cast<setter_t<uint32_t>>(&Header::processor_flag))
.def_property_readonly("arm_flags_list",
&Header::arm_flags_list,
"Return list of " RST_CLASS_REF(lief.ELF.ARM_EFLAGS) " present in "
":attr:`~lief.ELF.Header.processor_flag`",
py::return_value_policy::reference_internal)
.def_property_readonly("mips_flags_list",
&Header::mips_flags_list,
"Return list of " RST_CLASS_REF(lief.ELF.MIPS_EFLAGS) " present in "
":attr:`~lief.ELF.Header.processor_flag`",
py::return_value_policy::reference_internal)
.def_property_readonly("ppc64_flags_list",
&Header::ppc64_flags_list,
"Return list of " RST_CLASS_REF(lief.ELF.PPC64_EFLAGS) " present in "
":attr:`~lief.ELF.Header.processor_flag`",
py::return_value_policy::reference_internal)
.def_property_readonly("hexagon_flags_list",
&Header::hexagon_flags_list,
"Return list of " RST_CLASS_REF(lief.ELF.HEXAGON_EFLAGS) " present in "
":attr:`~lief.ELF.Header.processor_flag`",
py::return_value_policy::reference_internal)
.def_property("header_size",
static_cast<getter_t<uint32_t>>(&Header::header_size),
static_cast<setter_t<uint32_t>>(&Header::header_size),
@@ -139,6 +163,29 @@ void init_ELF_Header_class(py::module& m) {
return LIEF::Hash::hash(header);
})
.def("__contains__",
static_cast<bool (Header::*)(ARM_EFLAGS) const>(&Header::has),
"Check if the given " RST_CLASS_REF(lief.ELF.ARM_EFLAGS) " is present in "
":attr:`~lief.ELF.Header.processor_flag`")
.def("__contains__",
static_cast<bool (Header::*)(MIPS_EFLAGS) const>(&Header::has),
"Check if the given " RST_CLASS_REF(lief.ELF.MIPS_EFLAGS) " is present in "
":attr:`~lief.ELF.Header.processor_flag`")
.def("__contains__",
static_cast<bool (Header::*)(PPC64_EFLAGS) const>(&Header::has),
"Check if the given " RST_CLASS_REF(lief.ELF.PPC64_EFLAGS) " is present in "
":attr:`~lief.ELF.Header.processor_flag`")
.def("__contains__",
static_cast<bool (Header::*)(HEXAGON_EFLAGS) const>(&Header::has),
"Check if the given " RST_CLASS_REF(lief.ELF.HEXAGON_EFLAGS) " is present in "
":attr:`~lief.ELF.Header.processor_flag`")
.def("__str__",
[] (const Header& header)
{