about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm2/os_dep/win_api_x86_32.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/miasm2/os_dep/win_api_x86_32.py b/miasm2/os_dep/win_api_x86_32.py
index d9c659d3..2d10d3d0 100644
--- a/miasm2/os_dep/win_api_x86_32.py
+++ b/miasm2/os_dep/win_api_x86_32.py
@@ -1371,6 +1371,7 @@ def my_lstrcmp(jitter, funcname, get_str):
     ret_ad, args = jitter.func_args_stdcall(["ptr_str1", "ptr_str2"])
     s1 = get_str(args.ptr_str1)
     s2 = get_str(args.ptr_str2)
+    log.info("Compare %r with %r", s1, s2)
     jitter.func_ret_stdcall(ret_ad, cmp(s1, s2))
 
 
@@ -1398,6 +1399,7 @@ def my_strcpy(jitter, funcname, get_str, set_str):
     ret_ad, args = jitter.func_args_stdcall(["ptr_str1", "ptr_str2"])
     s2 = get_str(args.ptr_str2)
     set_str(args.ptr_str1, s2)
+    log.info("Copy '%r'", s2)
     jitter.func_ret_stdcall(ret_ad, args.ptr_str1)
 
 
@@ -1418,15 +1420,19 @@ def kernel32_lstrcpyn(jitter):
     ret_ad, args = jitter.func_args_stdcall(["ptr_str1", "ptr_str2",
                                              "mlen"])
     s2 = jitter.get_str_ansi(args.ptr_str2)
-    s2 = s2[:args.mlen]
-    jitter.vm.set_mem(args.ptr_str1, s2)
+    if len(s2) >= args.mlen:
+        s2 = s2[:args.mlen - 1]
+    log.info("Copy '%r'", s2)
+    jitter.set_str_ansi(args.ptr_str1, s2)
     jitter.func_ret_stdcall(ret_ad, args.ptr_str1)
 
 
 def my_strlen(jitter, funcname, get_str, mylen):
     ret_ad, args = jitter.func_args_stdcall(["src"])
     src = get_str(args.src)
-    jitter.func_ret_stdcall(ret_ad, mylen(src))
+    length = mylen(src)
+    log.info("Len of '%r' -> 0x%x", src, length)
+    jitter.func_ret_stdcall(ret_ad, length)
 
 
 def kernel32_lstrlenA(jitter):