class DriverUpgradeTestCase(unittest.TestCase): @classmethod def setUpClass(self): self.kdbg = LocalKernelDebugger() def test_alloc_memory(self): addr = self.kdbg.alloc_memory(0x1000) self.kdbg.write_byte(addr, 0x42) self.assertEqual(self.kdbg.read_byte(addr), 0x42) self.kdbg.write_byte(addr + 0xfff, 0x42) self.assertEqual(self.kdbg.read_byte(addr + 0xfff), 0x42) def test_full_driver_upgrade(self): upgrader = self.kdbg.upgrader upgrader.registered_ioctl = [] upgrader.full_driver_upgrade() self.test_alloc_memory() def test_retrieve_driver_upgrade(self): # Get current registered IO registered_io = self.kdbg.upgrader.registered_ioctl # Verif that some IO are registered self.assertTrue(registered_io) new_upgrader = type(self.kdbg.upgrader)(self.kdbg) # Verif that new upgrader see that driver is upgraded self.assertTrue(new_upgrader.is_driver_already_upgraded()) # Verif IOCTL retrieving new_upgrader.retrieve_upgraded_info() self.assertItemsEqual(registered_io, new_upgrader.registered_ioctl) def test_map_page_to_userland(self): kpage = self.kdbg.alloc_memory(0x1000) userpage = self.kdbg.map_page_to_userland(kpage, 0x1000) self.kdbg.write_dword(kpage, 0x11223344) self.assertEqual(ctypes.c_uint.from_address(userpage).value, 0x11223344) ctypes.c_uint.from_address(userpage + 4).value = 0x12345678 self.assertEqual(self.kdbg.read_dword(kpage + 4), 0x12345678)