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/arch/arm/jit.py | |
| parent | b1ed94019554b25d4d8924594f8868318e8a8c4a (diff) | |
| download | miasm-620c96e891d0ad356332713a23b39b9d2382470c.tar.gz miasm-620c96e891d0ad356332713a23b39b9d2382470c.zip | |
Introduce a naive "System V" calling convention
Diffstat (limited to 'miasm2/arch/arm/jit.py')
| -rw-r--r-- | miasm2/arch/arm/jit.py | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/miasm2/arch/arm/jit.py b/miasm2/arch/arm/jit.py index 70c708e1..e0d08679 100644 --- a/miasm2/arch/arm/jit.py +++ b/miasm2/arch/arm/jit.py @@ -34,11 +34,7 @@ class jitter_arml(jitter): @named_arguments def func_args_stdcall(self, n_args): - args = [] - for i in xrange(min(n_args, 4)): - args.append(self.cpu.get_gpreg()['R%d' % i]) - for i in xrange(max(0, n_args - 4)): - args.append(self.get_stack_arg(i)) + args = [self.get_arg_n_stdcall(i) for i in xrange(n_args)] ret_ad = self.cpu.LR return ret_ad, args @@ -48,13 +44,18 @@ class jitter_arml(jitter): self.cpu.R0 = ret_value return True + def get_arg_n_stdcall(self, index): if index < 4: - arg = self.cpu.get_gpreg()['R%d' % index] + arg = getattr(self.cpu, 'R%d' % index) else: arg = self.get_stack_arg(index-4) return arg + func_args_systemv = func_args_stdcall + func_ret_systemv = func_ret_stdcall + get_arg_n_systemv = get_arg_n_stdcall + def init_run(self, *args, **kwargs): jitter.init_run(self, *args, **kwargs) self.cpu.PC = self.pc |