Utilities

Demangling

LIEF exposes a demangling API for the following formats:

Input

lief.demangle("?h@@YAXH@Z")

Result

void __cdecl h(int)
result<std::string> LIEF::demangle(const std::string &mangled)

Demangle the given input.

This function only works with the extended version of LIEF

lief.demangle(mangled: str) str | None

Demangle the given input.

Warning

This function only works with the extended version of LIEF

lief::demangle

Is Extended?

To check if the current build is an extended version you can use:

bool LIEF::is_extended()

Whether this version of LIEF includes extended features.

lief._lief.__extended__ = False

bool(x) -> bool

Returns True when the argument x is true, False otherwise. The builtins True and False are the only two instances of the class bool. The class bool is a subclass of the class int, and cannot be subclassed.

lief::is_extended

In C++ you can also check if the LIEF_EXTENDED is defined:

#include <LIEF/config.hpp>

#if defined(LIEF_EXTENDED)
// Extended version
#else
// Regular version
#endif

Android Platform

lief.Android.code_name(version: lief.Android.ANDROID_VERSIONS) str

Return the Android code associated with a ANDROID_VERSIONS.

For example: Nougat

lief.Android.version_string(version: lief.Android.ANDROID_VERSIONS) str

Return the ANDROID_VERSIONS as a string..

For example: 7.0.1

class lief.Android.ANDROID_VERSIONS

Bases: object

UNKNOWN = lief._lief.Android.ANDROID_VERSIONS.UNKNOWN
VERSION_601 = lief._lief.Android.ANDROID_VERSIONS.VERSION_601
VERSION_700 = lief._lief.Android.ANDROID_VERSIONS.VERSION_700
VERSION_710 = lief._lief.Android.ANDROID_VERSIONS.VERSION_710
VERSION_712 = lief._lief.Android.ANDROID_VERSIONS.VERSION_712
VERSION_800 = lief._lief.Android.ANDROID_VERSIONS.VERSION_800
VERSION_810 = lief._lief.Android.ANDROID_VERSIONS.VERSION_810
VERSION_900 = lief._lief.Android.ANDROID_VERSIONS.VERSION_900
from_value(arg: int) lief.Android.ANDROID_VERSIONS = <nanobind.nb_func object>
property value int

The underlying integer value

const char *LIEF::Android::code_name(ANDROID_VERSIONS version)
const char *LIEF::Android::version_string(ANDROID_VERSIONS version)
enum class LIEF::Android::ANDROID_VERSIONS

Values:

enumerator VERSION_UNKNOWN = 0
enumerator VERSION_601 = 1
enumerator VERSION_700 = 2
enumerator VERSION_710 = 3
enumerator VERSION_712 = 4
enumerator VERSION_800 = 5
enumerator VERSION_810 = 6
enumerator VERSION_900 = 7

Python Leaks

lief.disable_leak_warning() None

Disable nanobind warnings about leaked objects. For instance:

nanobind: leaked 45 instances!
nanobind: leaked 25 types!
 - leaked type "lief._lief.FORMATS"
 - ... skipped remainder
nanobind: leaked 201 functions!
 - leaked function ""
 - leaked function "export_symbol"
 - ... skipped remainder
nanobind: this is likely caused by a reference counting issue in the binding code.