#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky ([email protected]) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest from utils import setup_syspath; setup_syspath() from elftools.common.py3compat import BytesIO from elftools.dwarf.callframe import ( CallFrameInfo, CIE, FDE, instruction_name, CallFrameInstruction, RegisterRule) from elftools.dwarf.structs import DWARFStructs from elftools.dwarf.descriptions import (describe_CFI_instructions, set_global_machine_arch) class TestCallFrame(unittest.TestCase): def assertInstruction(self, instr, name, args): self.assertIsInstance(instr, CallFrameInstruction) self.assertEqual(instruction_name(instr.opcode), name) self.assertEqual(instr.args, args) def test_spec_sample_d6(self): # D.6 sample in DWARFv3 s = BytesIO() data = (b'' +
#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky ([email protected]) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest from utils import setup_syspath setup_syspath() from elftools.dwarf.structs import DWARFStructs class TestDWARFStructs(unittest.TestCase): def test_lineprog_header(self): ds = DWARFStructs(little_endian=True, dwarf_format=32, address_size=4) c = ds.Dwarf_lineprog_header.parse( b'\x04\x10\x00\x00' + # initial length b'\x02\x00' + # version b'\x20\x00\x00\x00' + # header length b'\x05\x10\x40\x50' + # until and including line_range b'\x06' + # opcode_base b'\x00\x01\x04\x08\x0C' + # standard_opcode_lengths # 2 dir names followed by a NULL b'\x61\x62\x00\x70\x00\x00' + # a file entry
#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky ([email protected]) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest from utils import setup_syspath; setup_syspath() from elftools.common.py3compat import BytesIO, iteritems from elftools.dwarf.lineprogram import LineProgram, LineState, LineProgramEntry from elftools.dwarf.structs import DWARFStructs from elftools.dwarf.constants import * class TestLineProgram(unittest.TestCase): def _make_program_in_stream(self, stream): """ Create a LineProgram from the given program encoded in a stream """ ds = DWARFStructs(little_endian=True, dwarf_format=32, address_size=4) header = ds.Dwarf_lineprog_header.parse( b'\x04\x10\x00\x00' + # initial lenght b'\x03\x00' + # version b'\x20\x00\x00\x00' + # header length b'\x01\x01\x01\x0F' + # flags b'\x0A' + # opcode_base b'\x00\x01\x04\x08\x0C\x01\x01\x01\x00' + # standard_opcode_lengths # 2 dir names followed by a NULL
#------------------------------------------------------------------------------- # elftools tests # # Eli Bendersky ([email protected]) # This code is in the public domain #------------------------------------------------------------------------------- try: import unittest2 as unittest except ImportError: import unittest import os from utils import setup_syspath setup_syspath() from elftools.elf.elffile import ELFFile from elftools.common.exceptions import ELFError from elftools.elf.dynamic import DynamicTag class TestDynamicTag(unittest.TestCase): """Tests for the DynamicTag class.""" def test_requires_stringtable(self): with self.assertRaises(ELFError): dt = DynamicTag('', None) class TestDynamic(unittest.TestCase): """Tests for the Dynamic class.""" def test_missing_sections(self):