Refactor PE's relocation API

This commit is contained in:
Romain Thomas
2024-01-13 05:23:51 +01:00
parent 03e923030c
commit ada25284df
14 changed files with 233 additions and 279 deletions
-24
View File
@@ -100,28 +100,6 @@ void init_enums(nb::module_& m) {
.value(PY_ENUM(SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_WEAK_EXTERNAL))
.value(PY_ENUM(SYMBOL_STORAGE_CLASS::IMAGE_SYM_CLASS_CLR_TOKEN));
enum_<RELOCATIONS_BASE_TYPES>(m, "RELOCATIONS_BASE_TYPES")
.value("ABSOLUTE", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_ABSOLUTE)
.value("HIGH", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_HIGH)
.value("LOW", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_LOW)
.value("HIGHLOW", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_HIGHLOW)
.value("HIGHADJ", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_HIGHADJ)
.value("MIPS_JMPADDR", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_MIPS_JMPADDR)
.value("ARM_MOV32A", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_ARM_MOV32A)
.value("ARM_MOV32", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_ARM_MOV32)
.value("RISCV_HI20", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_RISCV_HI20)
.value("ARM_MOV32T", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_ARM_MOV32T)
.value("THUMB_MOV32", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_THUMB_MOV32)
.value("RISCV_LOW12I", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_RISCV_LOW12I)
.value("RISCV_LOW12S", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_RISCV_LOW12S)
.value("SECTION", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_SECTION)
.value("REL", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_REL)
.value("MIPS_JMPADDR16", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_MIPS_JMPADDR16)
.value("IA64_IMM64", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_IA64_IMM64)
.value("DIR64", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_DIR64)
.value("HIGH3ADJ", RELOCATIONS_BASE_TYPES::IMAGE_REL_BASED_HIGH3ADJ);
enum_<EXTENDED_WINDOW_STYLES>(m, "EXTENDED_WINDOW_STYLES")
.value(PY_ENUM(EXTENDED_WINDOW_STYLES::WS_EX_DLGMODALFRAME))
.value(PY_ENUM(EXTENDED_WINDOW_STYLES::WS_EX_NOPARENTNOTIFY))
@@ -143,8 +121,6 @@ void init_enums(nb::module_& m) {
.value(PY_ENUM(EXTENDED_WINDOW_STYLES::WS_EX_STATICEDGE))
.value(PY_ENUM(EXTENDED_WINDOW_STYLES::WS_EX_APPWINDOW));
enum_<WINDOW_STYLES>(m, "WINDOW_STYLES")
.value(PY_ENUM(WINDOW_STYLES::WS_OVERLAPPED))
.value(PY_ENUM(WINDOW_STYLES::WS_POPUP))
@@ -17,6 +17,8 @@
#include "LIEF/PE/RelocationEntry.hpp"
#include "enums_wrapper.hpp"
#include <string>
#include <sstream>
#include <nanobind/stl/string.h>
@@ -25,14 +27,39 @@ namespace LIEF::PE::py {
template<>
void create<RelocationEntry>(nb::module_& m) {
nb::class_<RelocationEntry, LIEF::Relocation>(m, "RelocationEntry",
nb::class_<RelocationEntry, LIEF::Relocation> entry(m, "RelocationEntry",
R"delim(
Class which represents an entry of the PE relocation table.
It extends the :class:`lief.Relocation` object to provide an uniform API across the file formats
)delim"_doc)
.def(nb::init<>())
It extends the :class:`lief.Relocation` object to provide an uniform API across the file formats.
)delim"_doc);
#define ENTRY(X) .value(to_string(RelocationEntry::BASE_TYPES::X), RelocationEntry::BASE_TYPES::X)
enum_<RelocationEntry::BASE_TYPES>(entry, "BASE_TYPES")
ENTRY(UNKNOWN)
ENTRY(ABSOLUTE)
ENTRY(HIGH)
ENTRY(LOW)
ENTRY(HIGHLOW)
ENTRY(HIGHADJ)
ENTRY(MIPS_JMPADDR)
ENTRY(ARM_MOV32A)
ENTRY(ARM_MOV32)
ENTRY(RISCV_HI20)
ENTRY(SECTION)
ENTRY(REL)
ENTRY(ARM_MOV32T)
ENTRY(THUMB_MOV32)
ENTRY(RISCV_LOW12I)
ENTRY(RISCV_LOW12S)
ENTRY(MIPS_JMPADDR16)
ENTRY(IA64_IMM64)
ENTRY(DIR64)
ENTRY(HIGH3ADJ);
#undef ENTRY
entry
.def(nb::init<>())
.def_prop_rw("data",
nb::overload_cast<>(&RelocationEntry::data, nb::const_),
nb::overload_cast<uint16_t>(&RelocationEntry::data),
@@ -50,8 +77,8 @@ void create<RelocationEntry>(nb::module_& m) {
.def_prop_rw("type",
nb::overload_cast<>(&RelocationEntry::type, nb::const_),
nb::overload_cast<RELOCATIONS_BASE_TYPES>(&RelocationEntry::type),
"Type of the relocation (see: " RST_CLASS_REF(lief.PE.RELOCATIONS_BASE_TYPES) ")"_doc)
nb::overload_cast<RelocationEntry::BASE_TYPES>(&RelocationEntry::type),
"Type of the relocation"_doc)
LIEF_DEFAULT_STR(RelocationEntry);
}