about summary refs log tree commit diff stats
path: root/test/os_dep/linux/stdlib.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/os_dep/linux/stdlib.py')
-rwxr-xr-xtest/os_dep/linux/stdlib.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/test/os_dep/linux/stdlib.py b/test/os_dep/linux/stdlib.py
new file mode 100755
index 00000000..ab39a487
--- /dev/null
+++ b/test/os_dep/linux/stdlib.py
@@ -0,0 +1,43 @@
+#! /usr/bin/env python2
+#-*- coding:utf-8 -*-
+
+import unittest
+import logging
+from miasm2.analysis.machine import Machine
+import miasm2.os_dep.linux_stdlib as stdlib
+from miasm2.core.utils import pck32
+from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE
+
+machine = Machine("x86_32")
+
+jit = machine.jitter()
+jit.init_stack()
+
+heap = stdlib.linobjs.heap
+
+class TestLinuxStdlib(unittest.TestCase):
+
+    def test_xxx_sprintf(self):
+        def alloc_str(s):
+            s += "\x00"
+            ptr = heap.alloc(jit, len(s))
+            jit.vm.set_mem(ptr, s)
+            return ptr
+        fmt  = alloc_str("'%s' %d")
+        str_ = alloc_str("coucou")
+        buf = heap.alloc(jit,1024)
+
+        jit.push_uint32_t(1111)
+        jit.push_uint32_t(str_)
+        jit.push_uint32_t(fmt)
+        jit.push_uint32_t(buf)
+        jit.push_uint32_t(0) # ret_ad
+        stdlib.xxx_sprintf(jit)
+        ret = jit.get_str_ansi(buf)
+        self.assertEqual(ret, "'coucou' 1111")
+
+
+if __name__ == '__main__':
+    testsuite = unittest.TestLoader().loadTestsFromTestCase(TestLinuxStdlib)
+    report = unittest.TextTestRunner(verbosity=2).run(testsuite)
+    exit(len(report.errors + report.failures))