Cybersecurity-Projects/PROJECTS/advanced/rveng/tests/test_xref.py

41 lines
1.1 KiB
Python

"""
©AngelaMos | 2026
test_xref.py
"""
from rveng.engine.disasm import disassemble_text
from rveng.engine.elf import ElfImage
from rveng.engine.xref import build_xrefs, xrefs_to
CHECK = 0x401146
FLAG = 0x402004
MAIN_CALLS_CHECK = 0x4011A6
MAIN_LEA_FLAG = 0x401173
def test_rip_relative_resolves_to_flag_string(gate_bytes: bytes):
image = ElfImage(gate_bytes)
by_addr = {i.address: i for i in disassemble_text(image)}
assert by_addr[MAIN_LEA_FLAG].rip_target == FLAG
def test_xref_finds_caller_of_check(gate_bytes: bytes):
image = ElfImage(gate_bytes)
refs = xrefs_to(disassemble_text(image), CHECK)
assert any(
r.from_addr == MAIN_CALLS_CHECK and r.kind == "call" for r in refs)
def test_xref_finds_data_reference_to_flag(gate_bytes: bytes):
image = ElfImage(gate_bytes)
refs = xrefs_to(disassemble_text(image), FLAG)
assert any(
r.from_addr == MAIN_LEA_FLAG and r.kind == "data" for r in refs)
def test_build_xrefs_groups_by_target(gate_bytes: bytes):
image = ElfImage(gate_bytes)
table = build_xrefs(disassemble_text(image))
assert CHECK in table
assert FLAG in table