diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/jitter/vm_mngr.py | 8 | ||||
| -rwxr-xr-x | test/os_dep/win_api_x86_32.py | 47 |
2 files changed, 54 insertions, 1 deletions
diff --git a/test/jitter/vm_mngr.py b/test/jitter/vm_mngr.py index 468fb347..0fec1734 100644 --- a/test/jitter/vm_mngr.py +++ b/test/jitter/vm_mngr.py @@ -25,3 +25,11 @@ for i, access_right in enumerate(shuffled_rights): # Check for modification for i, access_right in enumerate(shuffled_rights): assert myjit.vm.get_mem_access(base_addr + i * page_size) == access_right + +# Remove pages +for i in range(len(rights)): + myjit.vm.remove_memory_page(base_addr + i * page_size) + +# Add pages again +for i, access_right in enumerate(rights): + myjit.vm.add_memory_page(base_addr + i * page_size, access_right, data) diff --git a/test/os_dep/win_api_x86_32.py b/test/os_dep/win_api_x86_32.py index 66a4e628..6d1c9835 100755 --- a/test/os_dep/win_api_x86_32.py +++ b/test/os_dep/win_api_x86_32.py @@ -226,9 +226,54 @@ class TestWinAPI(unittest.TestCase): if i: self.assertTrue(vBool) else: self.assertFalse(vBool) + def test_VirtualXXFunctions(self): + def call_vprotect(jitter, addr, size, protect): + jitter.push_uint32_t(0x0) + jitter.push_uint32_t(protect) + jitter.push_uint32_t(size) + jitter.push_uint32_t(addr) + jitter.push_uint32_t(0) + winapi.kernel32_VirtualProtect(jitter) + + jit.push_uint32_t(0x2) + jit.push_uint32_t(0x2) + jit.push_uint32_t(0x4000) + jit.push_uint32_t(0x1000) + jit.push_uint32_t(0) + winapi.kernel32_VirtualAlloc(jit) + alloc_addr = jit.cpu.EAX + + self.assertEqual(jit.vm.get_all_memory()[alloc_addr]["size"], 0x4000) + self.assertEqual(jit.vm.get_all_memory()[alloc_addr]["access"], + winapi.ACCESS_DICT[0x2]) + + # Full area + call_vprotect(jit, alloc_addr, 0x4000, 0x1) + self.assertEqual(jit.vm.get_all_memory()[alloc_addr]["access"], + winapi.ACCESS_DICT[0x1]) + # Splits area [0--1000] [1000 -- 3000] [3000 -- 4000] + call_vprotect(jit, alloc_addr+0x1000, 0x2000, 0x40) + print(jit.vm) + for (addr, size, access) in [ + (alloc_addr, 0x1000, 0x1), + (alloc_addr + 0x1000, 0x2000, 0x40), + (alloc_addr + 0x3000, 0x1000, 0x1) + ]: + self.assertEqual(jit.vm.get_all_memory()[addr]["size"], size) + self.assertEqual(jit.vm.get_all_memory()[addr]["access"], + winapi.ACCESS_DICT[access]) + # Protect over split areas + call_vprotect(jit, alloc_addr, 0x4000, 0x4) + for (addr, size) in [ + (alloc_addr, 0x1000), + (alloc_addr + 0x1000, 0x2000), + (alloc_addr + 0x3000, 0x1000) + ]: + self.assertEqual(jit.vm.get_all_memory()[addr]["size"], size) + self.assertEqual(jit.vm.get_all_memory()[addr]["access"], + winapi.ACCESS_DICT[0x4]) if __name__ == '__main__': testsuite = unittest.TestLoader().loadTestsFromTestCase(TestWinAPI) report = unittest.TextTestRunner(verbosity=2).run(testsuite) exit(len(report.errors + report.failures)) - |