diff options
| author | Caroline Leman <carolinele@users.noreply.github.com> | 2020-01-28 01:17:40 +0100 |
|---|---|---|
| committer | Caroline Leman <carolinele@users.noreply.github.com> | 2020-01-28 15:42:14 +0100 |
| commit | 19a25f3831a8a8f0fea07295a1e23d405cacd978 (patch) | |
| tree | 81c39e5f11b6bc8bd26471ae67d058b7c8840a68 | |
| parent | 78107cdcf06294f0e394806d852a610c08308761 (diff) | |
| download | miasm-19a25f3831a8a8f0fea07295a1e23d405cacd978.tar.gz miasm-19a25f3831a8a8f0fea07295a1e23d405cacd978.zip | |
Test/Win Api: Add test to virtualprotect functions
| -rwxr-xr-x | test/os_dep/win_api_x86_32.py | 47 |
1 files changed, 46 insertions, 1 deletions
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)) - |