diff options
| author | Pierre Lalet <pierre@droids-corp.org> | 2015-07-02 19:07:19 +0200 |
|---|---|---|
| committer | Pierre Lalet <pierre@droids-corp.org> | 2015-07-02 19:07:19 +0200 |
| commit | 62b99a75e0de39019f68bbc4813159e5837a42c6 (patch) | |
| tree | a6c0642cb19470ebe3fce8952c2681c96e8b412d | |
| parent | f489ea360c38792bc4c382f25c0a0439307f6156 (diff) | |
| parent | d85f4a5700b6bafa69c7cc98039f1c98cf9201f0 (diff) | |
| download | miasm-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.py | 17 |
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)) |