diff options
| author | serpilliere <devnull@localhost> | 2014-07-03 13:34:01 +0200 |
|---|---|---|
| committer | serpilliere <devnull@localhost> | 2014-07-03 13:34:01 +0200 |
| commit | 7c42f6f2139a550f099f6d0ff7b95712abff37ef (patch) | |
| tree | d443a9bc62ef964de945a9302802850d0d1cbe7c /miasm2/jitter/jitload.py | |
| parent | a8003c034b1460186d615bbc09cc926168f2c796 (diff) | |
| download | miasm-7c42f6f2139a550f099f6d0ff7b95712abff37ef.tar.gz miasm-7c42f6f2139a550f099f6d0ff7b95712abff37ef.zip | |
Jitter: Fix fastcall/stdcall arch arm and linux
Diffstat (limited to 'miasm2/jitter/jitload.py')
| -rw-r--r-- | miasm2/jitter/jitload.py | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/miasm2/jitter/jitload.py b/miasm2/jitter/jitload.py index b597e5f4..8313c63c 100644 --- a/miasm2/jitter/jitload.py +++ b/miasm2/jitter/jitload.py @@ -965,21 +965,30 @@ class jitter_arm(jitter): # calling conventions - def func_args_fastcall(self, n_args): + def func_args_stdcall(self, n_args): args = [] for i in xrange(min(n_args, 4)): args.append(self.cpu.vm_get_gpreg()['R%d' % i]) for i in xrange(max(0, n_args - 4)): args.append(self.get_stack_arg(i)) - log.debug('%s %s' % (whoami(), [hex(x) for x in args])) - return args - def func_ret_fastcall(self, ret_value=None): - self.pc = self.cpu.PC = self.cpu.LR + ret_ad = self.cpu.LR + log.debug('%s %s %s' % (whoami(), hex(ret_ad), [hex(x) for x in args])) + return ret_ad, args + + def func_ret_stdcall(self, ret_addr, ret_value=None): + self.pc = self.cpu.PC = ret_addr if ret_value is not None: self.cpu.R0 = ret_value return True + def get_arg_n_stdcall(self, n): + if n < 4: + arg = self.cpu.vm_get_gpreg()['R%d' % n] + else: + arg = self.get_stack_arg(n-4) + return arg + def add_lib_handler(self, libs): from miasm2.jitter.os_dep import linux_stdlib for offset, fname in libs.fad2cname.iteritems(): |