def setUp(self): symbols = [ sa.Symbol(0x1000, 'F', 0x15C, 'hook_task'), sa.Symbol(0x2000, 'F', 0x51C, 'console_task'), sa.Symbol(0x3200, 'O', 0x124, '__just_data'), sa.Symbol(0x4000, 'F', 0x11C, 'touchpad_calc'), sa.Symbol(0x5000, 'F', 0x12C, 'touchpad_calc.constprop.42'), sa.Symbol(0x12000, 'F', 0x13C, 'trackpad_range'), sa.Symbol(0x13000, 'F', 0x200, 'inlined_mul'), sa.Symbol(0x13100, 'F', 0x200, 'inlined_mul'), sa.Symbol(0x13100, 'F', 0x200, 'inlined_mul_alias'), sa.Symbol(0x20000, 'O', 0x0, '__array'), sa.Symbol(0x20010, 'O', 0x0, '__array_end'), ] tasklist = [ sa.Task('HOOKS', 'hook_task', 2048, 0x1000), sa.Task('CONSOLE', 'console_task', 460, 0x2000) ] # Array at 0x20000 that contains pointers to hook_task and console_task, # with stride=8, offset=4 rodata = (0x20000, [0xDEAD1000, 0x00001000, 0xDEAD2000, 0x00002000]) options = mock.MagicMock(elf_path='./ec.RW.elf', export_taskinfo='fake', section='RW', objdump='objdump', addr2line='addr2line', annotation=None) self.analyzer = sa.StackAnalyzer(options, symbols, rodata, tasklist, {})
def setUp(self): symbols = [sa.Symbol(0x1000, 'F', 0x15C, 'hook_task'), sa.Symbol(0x2000, 'F', 0x51C, 'console_task'), sa.Symbol(0x3200, 'O', 0x124, '__just_data'), sa.Symbol(0x4000, 'F', 0x11C, 'touchpad_calc'), sa.Symbol(0x5000, 'F', 0x12C, 'touchpad_calc.constprop.42'), sa.Symbol(0x12000, 'F', 0x13C, 'trackpad_range'), sa.Symbol(0x13000, 'F', 0x200, 'inlined_mul'), sa.Symbol(0x13100, 'F', 0x200, 'inlined_mul'), sa.Symbol(0x13100, 'F', 0x200, 'inlined_mul_alias')] tasklist = [sa.Task('HOOKS', 'hook_task', 2048, 0x1000), sa.Task('CONSOLE', 'console_task', 460, 0x2000)] options = mock.MagicMock(elf_path='./ec.RW.elf', export_taskinfo='fake', section='RW', objdump='objdump', addr2line='addr2line', annotation=None) self.analyzer = sa.StackAnalyzer(options, symbols, tasklist, {})
def testLoadTasklist(self): def tasklist_to_taskinfos(pointer, tasklist): taskinfos = [] for task in tasklist: taskinfos.append( sa.TaskInfo(name=task.name.encode('utf-8'), routine=task.routine_name.encode('utf-8'), stack_size=task.stack_max_size)) TaskInfoArray = sa.TaskInfo * len(taskinfos) pointer.contents.contents = TaskInfoArray(*taskinfos) return len(taskinfos) def ro_taskinfos(pointer): return tasklist_to_taskinfos(pointer, expect_ro_tasklist) def rw_taskinfos(pointer): return tasklist_to_taskinfos(pointer, expect_rw_tasklist) expect_ro_tasklist = [ sa.Task('HOOKS', 'hook_task', 2048, 0x1000), ] expect_rw_tasklist = [ sa.Task('HOOKS', 'hook_task', 2048, 0x1000), sa.Task('WOOKS', 'hook_task', 4096, 0x1000), sa.Task('CONSOLE', 'console_task', 460, 0x2000), ] export_taskinfo = mock.MagicMock( get_ro_taskinfos=mock.MagicMock(side_effect=ro_taskinfos), get_rw_taskinfos=mock.MagicMock(side_effect=rw_taskinfos)) tasklist = sa.LoadTasklist('RO', export_taskinfo, self.analyzer.symbols) self.assertEqual(tasklist, expect_ro_tasklist) tasklist = sa.LoadTasklist('RW', export_taskinfo, self.analyzer.symbols) self.assertEqual(tasklist, expect_rw_tasklist)
def testTask(self): task_a = sa.Task('a', 'a_task', 1234) task_b = sa.Task('b', 'b_task', 5678, 0x1000) self.assertEqual(task_a, task_a) self.assertNotEqual(task_a, task_b) self.assertNotEqual(task_a, None)