mirror of
https://github.com/lief-project/LIEF
synced 2026-06-08 15:30:44 +00:00
67 lines
2.6 KiB
Python
67 lines
2.6 KiB
Python
"""
|
|
Make sure we can correctly process DWARF files generated by
|
|
BinaryNinja: https://docs.binary.ninja/guide/debuginfo.html
|
|
"""
|
|
import lief
|
|
import pytest
|
|
from utils import get_sample
|
|
|
|
if not lief.__extended__:
|
|
pytest.skip("skipping: extended version only", allow_module_level=True)
|
|
|
|
def test_dwo():
|
|
target = lief.dwarf.load(get_sample("private/DWARF/binaryninja/dxp.debug"))
|
|
units = list(target.compilation_units)
|
|
assert len(units) == 1
|
|
|
|
CU = units[0]
|
|
assert CU.producer == "Binary Ninja DWARF Export Plugin"
|
|
|
|
assert CU.find_function("toto") is None
|
|
dp_sys_readlinkat = CU.find_function("dp_sys_readlinkat")
|
|
assert dp_sys_readlinkat is not None
|
|
|
|
assert dp_sys_readlinkat.address == 0x14a10
|
|
assert dp_sys_readlinkat.type is not None
|
|
ret_type = dp_sys_readlinkat.type
|
|
assert ret_type.name == "int32_t"
|
|
assert ret_type.size == 4
|
|
|
|
def test_structures():
|
|
binaryninja_dxp = lief.dwarf.load(get_sample("private/DWARF/binaryninja/dxp.debug"))
|
|
CU = list(binaryninja_dxp.compilation_units)[0]
|
|
_dp_init_mp3_info = CU.find_function("dp_init_mp3_info")
|
|
|
|
def test_find():
|
|
binaryninja_dxp = lief.dwarf.load(get_sample("private/DWARF/binaryninja/dxp.debug"))
|
|
CU = list(binaryninja_dxp.compilation_units)[0]
|
|
var = CU.find_variable(0x78be0)
|
|
assert var is not None
|
|
assert var.name == "g_protections_conf"
|
|
|
|
assert binaryninja_dxp.find_function(0x0004fb44) is not None
|
|
|
|
def test_types():
|
|
binaryninja_liblinker = lief.dwarf.load(get_sample("private/DWARF/binaryninja/liblinker.debug"))
|
|
dp_ctx_t: lief.dwarf.types.Structure = binaryninja_liblinker.find_type("dp_ctx_t")
|
|
assert isinstance(dp_ctx_t, lief.dwarf.types.Structure)
|
|
#dp_ctx_p0_t = dp_ctx_t.find_member(0)
|
|
#assert dp_ctx_t.find_member(0x8).name == "dp_ctx_p0"
|
|
#assert dp_ctx_t.find_member(0xd0).name == "relro_xxx"
|
|
|
|
CU = next(binaryninja_liblinker.compilation_units)
|
|
dp_get_env_info = CU.find_function("dp_get_env_info")
|
|
assert dp_get_env_info is not None
|
|
|
|
def test_variables():
|
|
binaryninja_liblinker = lief.dwarf.load(get_sample("private/DWARF/binaryninja/liblinker.debug"))
|
|
assert binaryninja_liblinker.find_variable("protected_lib").address == 0x30000
|
|
assert binaryninja_liblinker.find_variable(0x30000).name == "protected_lib"
|
|
|
|
|
|
def test_external_load():
|
|
elf = lief.ELF.parse(get_sample("private/DWARF/binaryninja/dexprotector/libdp.so"))
|
|
assert len(list(elf.disassemble("dp_sys_mprotect"))) == 0
|
|
elf.load_debug_info(get_sample("private/DWARF/binaryninja/dexprotector/libdp.dwarf"))
|
|
assert len(list(elf.disassemble("dp_sys_mprotect"))) == 17
|