diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-11-02 22:24:23 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2019-11-12 15:10:44 +0100 |
| commit | 4dc802e3544e669cfea1d6be8a01ca2a2600dfef (patch) | |
| tree | 96a79b40469c1db9201ca46b210503d4dcf378c5 /miasm/os_dep/linux_stdlib.py | |
| parent | 83e54bd2de945a36ab5ccd4cc5b94817d7cb0112 (diff) | |
| download | focaccia-miasm-4dc802e3544e669cfea1d6be8a01ca2a2600dfef.tar.gz focaccia-miasm-4dc802e3544e669cfea1d6be8a01ca2a2600dfef.zip | |
Clear get_str_* API
get_str_ansi decoded strings using utf8 and was blindly used for pure windows function (LoadLibraryA) and for stdlib functions (printf, strlen, ...) even if strlen does not use utf8... New API is: get_win_str_a/get_win_str_w and set_win_str_a/set_win_str_w for windows (respectively codepage1252/windows utf16) .Those functions should only be used in windows strings manipulations, so there are taken out of the jitter. get_c_str/set_c_str: as those functions are "classic" in OSes, they are keeped in the jitter.
Diffstat (limited to 'miasm/os_dep/linux_stdlib.py')
| -rw-r--r-- | miasm/os_dep/linux_stdlib.py | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/miasm/os_dep/linux_stdlib.py b/miasm/os_dep/linux_stdlib.py index 3fa5b02e..348ef9b4 100644 --- a/miasm/os_dep/linux_stdlib.py +++ b/miasm/os_dep/linux_stdlib.py @@ -143,7 +143,7 @@ def xxx_puts(jitter): def get_fmt_args(jitter, fmt, cur_arg): - return _get_fmt_args(fmt, cur_arg, jitter.get_str_ansi, jitter.get_arg_n_systemv) + return _get_fmt_args(fmt, cur_arg, jitter.get_c_str, jitter.get_arg_n_systemv) def xxx_snprintf(jitter): @@ -153,7 +153,7 @@ def xxx_snprintf(jitter): output = get_fmt_args(jitter, fmt, cur_arg) output = output[:size - 1] ret = len(output) - jitter.vm.set_mem(args.string, (output + '\x00').encode('utf8')) + jitter.set_c_str(args.string, output) return jitter.func_ret_systemv(ret_addr, ret) @@ -162,7 +162,7 @@ def xxx_sprintf(jitter): cur_arg, fmt = 2, args.fmt output = get_fmt_args(jitter, fmt, cur_arg) ret = len(output) - jitter.vm.set_mem(args.string, (output + '\x00').encode('utf8')) + jitter.set_c_str(args.string, output) return jitter.func_ret_systemv(ret_addr, ret) @@ -177,14 +177,14 @@ def xxx_printf(jitter): def xxx_strcpy(jitter): ret_ad, args = jitter.func_args_systemv(["dst", "src"]) - str_src = jitter.get_str_ansi(args.src) + '\x00' - jitter.vm.set_mem(args.dst, str_src.encode('utf8')) + str_src = jitter.get_c_str(args.src) + jitter.set_c_str(args.dst, str_src) jitter.func_ret_systemv(ret_ad, args.dst) def xxx_strlen(jitter): ret_ad, args = jitter.func_args_systemv(["src"]) - str_src = jitter.get_str_ansi(args.src) + str_src = jitter.get_c_str(args.src) jitter.func_ret_systemv(ret_ad, len(str_src)) @@ -201,13 +201,13 @@ def xxx_free(jitter): def xxx_strcmp(jitter): ret_ad, args = jitter.func_args_systemv(["ptr_str1", "ptr_str2"]) - s1 = jitter.get_str_ansi(args.ptr_str1) - s2 = jitter.get_str_ansi(args.ptr_str2) + s1 = jitter.get_c_str(args.ptr_str1) + s2 = jitter.get_c_str(args.ptr_str2) jitter.func_ret_systemv(ret_ad, cmp_elts(s1, s2)) def xxx_strncmp(jitter): ret_ad, args = jitter.func_args_systemv(["ptr_str1", "ptr_str2", "size"]) - s1 = jitter.get_str_ansi(args.ptr_str1, args.size) - s2 = jitter.get_str_ansi(args.ptr_str2, args.size) + s1 = jitter.get_c_str(args.ptr_str1, args.size) + s2 = jitter.get_c_str(args.ptr_str2, args.size) jitter.func_ret_systemv(ret_ad, cmp_elts(s1, s2)) |