about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorCaroline Leman <carolinele@users.noreply.github.com>2020-01-28 01:17:40 +0100
committerCaroline Leman <carolinele@users.noreply.github.com>2020-01-28 15:42:14 +0100
commit19a25f3831a8a8f0fea07295a1e23d405cacd978 (patch)
tree81c39e5f11b6bc8bd26471ae67d058b7c8840a68
parent78107cdcf06294f0e394806d852a610c08308761 (diff)
downloadmiasm-19a25f3831a8a8f0fea07295a1e23d405cacd978.tar.gz
miasm-19a25f3831a8a8f0fea07295a1e23d405cacd978.zip
Test/Win Api: Add test to virtualprotect functions
-rwxr-xr-xtest/os_dep/win_api_x86_32.py47
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))
-