about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorPierre Lalet <pierre@droids-corp.org>2015-07-02 19:07:19 +0200
committerPierre Lalet <pierre@droids-corp.org>2015-07-02 19:07:19 +0200
commit62b99a75e0de39019f68bbc4813159e5837a42c6 (patch)
treea6c0642cb19470ebe3fce8952c2681c96e8b412d
parentf489ea360c38792bc4c382f25c0a0439307f6156 (diff)
parentd85f4a5700b6bafa69c7cc98039f1c98cf9201f0 (diff)
downloadmiasm-62b99a75e0de39019f68bbc4813159e5837a42c6.tar.gz
miasm-62b99a75e0de39019f68bbc4813159e5837a42c6.zip
Merge pull request #188 from serpilliere/fix_winapi
Fix winapi
-rw-r--r--miasm2/os_dep/win_api_x86_32.py17
1 files changed, 13 insertions, 4 deletions
diff --git a/miasm2/os_dep/win_api_x86_32.py b/miasm2/os_dep/win_api_x86_32.py
index 62254a66..fecc8a29 100644
--- a/miasm2/os_dep/win_api_x86_32.py
+++ b/miasm2/os_dep/win_api_x86_32.py
@@ -23,6 +23,7 @@ import time
 import string
 import logging
 from zlib import crc32
+from StringIO import StringIO
 
 try:
     from Crypto.Hash import MD5, SHA
@@ -2175,10 +2176,18 @@ def kernel32_CreateFileMapping(jitter, funcname, get_str):
                                              "dwmaximumsizelow", "lpname"])
     # f = get_str(jitter, args.lpname) if args.lpname else None
 
-    if not args.hfile in winobjs.handle_pool:
-        raise ValueError('unknown handle')
+    if args.hfile == 0xffffffff:
+        # Create null mapping
+        if args.dwmaximumsizehigh:
+            raise NotImplementedError("Untested case")
+        hmap = StringIO("\x00"*args.dwmaximumsizelow)
+        hmap_handle = winobjs.handle_pool.add('filemem', hmap)
 
-    ret = winobjs.handle_pool.add('filemapping', args.hfile)
+        ret = winobjs.handle_pool.add('filemapping', hmap_handle)
+    else:
+        if not args.hfile in winobjs.handle_pool:
+            raise ValueError('unknown handle')
+        ret = winobjs.handle_pool.add('filemapping', args.hfile)
     jitter.func_ret_stdcall(ret_ad, ret)
 
 
@@ -2205,7 +2214,7 @@ def kernel32_MapViewOfFile(jitter):
     hfile_o = winobjs.handle_pool[hmap.info]
     fd = hfile_o.info
     fd.seek((args.dwfileoffsethigh << 32) | args.dwfileoffsetlow)
-    data = fd.read(args.length) if args.length else args.read()
+    data = fd.read(args.length) if args.length else fd.read()
     length = len(data)
 
     log.debug('mapp total: %x', len(data))