1 #-------------------------------------------------------------------------------
4 # Eli Bendersky (eliben@gmail.com)
5 # This code is in the public domain
6 #-------------------------------------------------------------------------------
9 from elftools
.dwarf
.descriptions
import ExprDumper
, set_global_machine_arch
10 from elftools
.dwarf
.structs
import DWARFStructs
13 class TestExprDumper(unittest
.TestCase
):
14 structs32
= DWARFStructs(
20 self
.visitor
= ExprDumper(self
.structs32
)
21 set_global_machine_arch('x64')
23 def test_basic_single(self
):
24 self
.visitor
.process_expr([0x1b])
25 self
.assertEqual(self
.visitor
.get_str(),
29 self
.visitor
.process_expr([0x74, 0x82, 0x01])
30 self
.assertEqual(self
.visitor
.get_str(),
31 'DW_OP_breg4 (rsi): 130')
34 self
.visitor
.process_expr([0x91, 0x82, 0x01])
35 self
.assertEqual(self
.visitor
.get_str(),
39 self
.visitor
.process_expr([0x51])
40 self
.assertEqual(self
.visitor
.get_str(),
44 self
.visitor
.process_expr([0x90, 16])
45 self
.assertEqual(self
.visitor
.get_str(),
46 'DW_OP_regx: 16 (rip)')
49 self
.visitor
.process_expr([0x9d, 0x8f, 0x0A, 0x90, 0x01])
50 self
.assertEqual(self
.visitor
.get_str(),
51 'DW_OP_bit_piece: 1295 144')
53 def test_basic_sequence(self
):
54 self
.visitor
.process_expr([0x03, 0x01, 0x02, 0, 0, 0x06, 0x06])
55 self
.assertEqual(self
.visitor
.get_str(),
56 'DW_OP_addr: 201; DW_OP_deref; DW_OP_deref')
59 self
.visitor
.process_expr([0x15, 0xFF, 0x0b, 0xf1, 0xff])
60 self
.assertEqual(self
.visitor
.get_str(),
61 'DW_OP_pick: 255; DW_OP_const2s: -15')
64 self
.visitor
.process_expr([0x1d, 0x1e, 0x1d, 0x1e, 0x1d, 0x1e])
65 self
.assertEqual(self
.visitor
.get_str(),
66 'DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul; DW_OP_mod; DW_OP_mul')
69 if __name__
== '__main__':