diff options
| author | Ajax <commial@gmail.com> | 2017-03-31 15:09:01 +0200 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2017-04-06 13:47:38 +0200 |
| commit | 620c96e891d0ad356332713a23b39b9d2382470c (patch) | |
| tree | 7ce86a2fcc502800a4c426a43cb362e17ed80002 /miasm2/os_dep/linux_stdlib.py | |
| parent | b1ed94019554b25d4d8924594f8868318e8a8c4a (diff) | |
| download | miasm-620c96e891d0ad356332713a23b39b9d2382470c.tar.gz miasm-620c96e891d0ad356332713a23b39b9d2382470c.zip | |
Introduce a naive "System V" calling convention
Diffstat (limited to 'miasm2/os_dep/linux_stdlib.py')
| -rw-r--r-- | miasm2/os_dep/linux_stdlib.py | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/miasm2/os_dep/linux_stdlib.py b/miasm2/os_dep/linux_stdlib.py index b05b2cd9..683104d0 100644 --- a/miasm2/os_dep/linux_stdlib.py +++ b/miasm2/os_dep/linux_stdlib.py @@ -25,9 +25,9 @@ def xxx_isprint(jitter): checks for any printable character including space. ''' - ret_addr, args = jitter.func_args_stdcall(['c']) + ret_addr, args = jitter.func_args_systemv(['c']) ret = 1 if chr(args.c & 0xFF) in printable else 0 - return jitter.func_ret_stdcall(ret_addr, ret) + return jitter.func_ret_systemv(ret_addr, ret) def xxx_memcpy(jitter): @@ -37,9 +37,9 @@ def xxx_memcpy(jitter): copies n bytes from memory area src to memory area dest. ''' - ret_addr, args = jitter.func_args_stdcall(['dest', 'src', 'n']) + ret_addr, args = jitter.func_args_systemv(['dest', 'src', 'n']) jitter.vm.set_mem(args.dest, jitter.vm.get_mem(args.src, args.n)) - return jitter.func_ret_stdcall(ret_addr, args.dest) + return jitter.func_ret_systemv(ret_addr, args.dest) def xxx_memset(jitter): @@ -50,9 +50,9 @@ def xxx_memset(jitter): fills the first n bytes of the memory area pointed to by s with the constant byte c.''' - ret_addr, args = jitter.func_args_stdcall(['dest', 'c', 'n']) + ret_addr, args = jitter.func_args_systemv(['dest', 'c', 'n']) jitter.vm.set_mem(args.dest, chr(args.c & 0xFF) * args.n) - return jitter.func_ret_stdcall(ret_addr, args.dest) + return jitter.func_ret_systemv(ret_addr, args.dest) def xxx_puts(jitter): @@ -62,7 +62,7 @@ def xxx_puts(jitter): writes the string s and a trailing newline to stdout. ''' - ret_addr, args = jitter.func_args_stdcall(['s']) + ret_addr, args = jitter.func_args_systemv(['s']) index = args.s char = jitter.vm.get_mem(index, 1) while char != '\x00': @@ -70,7 +70,7 @@ def xxx_puts(jitter): index += 1 char = jitter.vm.get_mem(index, 1) stdout.write('\n') - return jitter.func_ret_stdcall(ret_addr, 1) + return jitter.func_ret_systemv(ret_addr, 1) def get_fmt_args(jitter, fmt, cur_arg): @@ -89,9 +89,9 @@ def get_fmt_args(jitter, fmt, cur_arg): if char.lower() in '%cdfsux': break if token.endswith('s'): - arg = jitter.get_str_ansi(jitter.get_arg_n_stdcall(cur_arg)) + arg = jitter.get_str_ansi(jitter.get_arg_n_systemv(cur_arg)) else: - arg = jitter.get_arg_n_stdcall(cur_arg) + arg = jitter.get_arg_n_systemv(cur_arg) char = token % arg cur_arg += 1 output += char @@ -99,67 +99,67 @@ def get_fmt_args(jitter, fmt, cur_arg): def xxx_snprintf(jitter): - ret_addr, args = jitter.func_args_stdcall(['string', 'size', 'fmt']) + ret_addr, args = jitter.func_args_systemv(['string', 'size', 'fmt']) cur_arg, fmt = 3, args.fmt size = args.size if args.size else 1 output = get_fmt_args(jitter, fmt, cur_arg) output = output[:size - 1] ret = len(output) jitter.vm.set_mem(args.string, output + '\x00') - return jitter.func_ret_stdcall(ret_addr, ret) + return jitter.func_ret_systemv(ret_addr, ret) def xxx_sprintf(jitter): - ret_addr, args = jitter.func_args_stdcall(['string', 'fmt']) + ret_addr, args = jitter.func_args_systemv(['string', 'fmt']) 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') - return jitter.func_ret_stdcall(ret_addr, ret) + return jitter.func_ret_systemv(ret_addr, ret) def xxx_printf(jitter): - ret_addr, args = jitter.func_args_stdcall(['fmt']) + ret_addr, args = jitter.func_args_systemv(['fmt']) cur_arg, fmt = 1, args.fmt output = get_fmt_args(jitter, fmt, cur_arg) ret = len(output) print output, - return jitter.func_ret_stdcall(ret_addr, ret) + return jitter.func_ret_systemv(ret_addr, ret) def xxx_strcpy(jitter): - ret_ad, args = jitter.func_args_stdcall(["dst", "src"]) + 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) - jitter.func_ret_stdcall(ret_ad, args.dst) + jitter.func_ret_systemv(ret_ad, args.dst) def xxx_strlen(jitter): - ret_ad, args = jitter.func_args_stdcall(["src"]) + ret_ad, args = jitter.func_args_systemv(["src"]) str_src = jitter.get_str_ansi(args.src) - jitter.func_ret_stdcall(ret_ad, len(str_src)) + jitter.func_ret_systemv(ret_ad, len(str_src)) def xxx_malloc(jitter): - ret_ad, args = jitter.func_args_stdcall(["msize"]) + ret_ad, args = jitter.func_args_systemv(["msize"]) addr = linobjs.heap.alloc(jitter, args.msize) - jitter.func_ret_stdcall(ret_ad, addr) + jitter.func_ret_systemv(ret_ad, addr) def xxx_free(jitter): - ret_ad, args = jitter.func_args_stdcall(["ptr"]) - jitter.func_ret_stdcall(ret_ad, 0) + ret_ad, args = jitter.func_args_systemv(["ptr"]) + jitter.func_ret_systemv(ret_ad, 0) def xxx_strcmp(jitter): - ret_ad, args = jitter.func_args_stdcall(["ptr_str1", "ptr_str2"]) + 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) - jitter.func_ret_stdcall(ret_ad, cmp(s1, s2)) + jitter.func_ret_systemv(ret_ad, cmp(s1, s2)) def xxx_strncmp(jitter): - ret_ad, args = jitter.func_args_stdcall(["ptr_str1", "ptr_str2", "size"]) + 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) - jitter.func_ret_stdcall(ret_ad, cmp(s1, s2)) + jitter.func_ret_systemv(ret_ad, cmp(s1, s2)) |