diff options
| author | Camille Mougey <commial@gmail.com> | 2018-04-18 10:51:16 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-04-18 10:51:16 +0200 |
| commit | 82f9e5defa36f336bd1dd2c060afe135c89f8474 (patch) | |
| tree | 6777a5679a3bd4005a69c9f48a8f4daf46a846bf /miasm2/core/cpu.py | |
| parent | 77ed4ad93fd007fcab5d84a6b95480897ffe263f (diff) | |
| parent | ae0cc091837b9ef025eed65296d28d603098a433 (diff) | |
| download | miasm-82f9e5defa36f336bd1dd2c060afe135c89f8474.tar.gz miasm-82f9e5defa36f336bd1dd2c060afe135c89f8474.zip | |
Merge pull request #721 from serpilliere/add_arm_t2_instr
Add arm t2 instr
Diffstat (limited to '')
| -rw-r--r-- | miasm2/core/cpu.py | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/miasm2/core/cpu.py b/miasm2/core/cpu.py index aa94773f..57057a85 100644 --- a/miasm2/core/cpu.py +++ b/miasm2/core/cpu.py @@ -100,6 +100,24 @@ class reg_info: return self.expr.index(e) + +class reg_info_dct: + + def __init__(self, reg_expr): + self.dct_str_inv = dict((v.name, k) for k, v in reg_expr.iteritems()) + self.dct_expr = reg_expr + self.dct_expr_inv = dict((v, k) for k, v in reg_expr.iteritems()) + reg_str = [v.name for v in reg_expr.itervalues()] + self.parser = literal_list(reg_str).setParseAction(self.reg2expr) + + def reg2expr(self, s): + i = self.dct_str_inv[s[0]] + return self.dct_expr[i] + + def expr2regi(self, e): + return self.dct_expr_inv[e] + + def gen_reg(rname, env, sz=32): """ Gen reg expr and parser @@ -431,13 +449,14 @@ class bs(object): self.cls = cls self.fname = fname self.order = order - self.lmask = lmask self.fbits = fbits self.fmask = fmask self.flen = flen self.value = value self.kargs = kargs + lmask = property(lambda self:(1 << self.l) - 1) + def __getitem__(self, item): return getattr(self, item) @@ -502,7 +521,6 @@ class bsi(object): self.cls = cls self.fname = fname self.order = order - self.lmask = lmask self.fbits = fbits self.fmask = fmask self.flen = flen @@ -510,6 +528,8 @@ class bsi(object): self.kargs = kargs self.__dict__.update(self.kargs) + lmask = property(lambda self:(1 << self.l) - 1) + def decode(self, v): self.value = v & self.lmask return True @@ -1393,7 +1413,9 @@ class cls_mn(object): log.debug('cannot encode %r', f) can_encode = False break + if f.value is not None and f.l: + assert f.value <= f.lmask cur_len += f.l index += 1 if ret is True: @@ -1557,6 +1579,8 @@ class imm_noarg(object): v = self.encodeval(v) if v is False: return False + if v > self.lmask: + return False self.value = v return True |