diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2014-10-08 17:59:45 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2014-10-08 17:59:45 +0200 |
| commit | 2f4d1bf249f09b17c85f78bb9d2cbdec60b5be45 (patch) | |
| tree | 4947690040f000b8ac582c9e76e8b084001f740d | |
| parent | faae3a839c34c49cd26a0665c9e646f1a5127784 (diff) | |
| download | miasm-2f4d1bf249f09b17c85f78bb9d2cbdec60b5be45.tar.gz miasm-2f4d1bf249f09b17c85f78bb9d2cbdec60b5be45.zip | |
asmbloc: remove un needed mode in asm function
| -rw-r--r-- | example/asm_arm.py | 2 | ||||
| -rw-r--r-- | example/asm_arm_sc.py | 2 | ||||
| -rw-r--r-- | example/asm_armt.py | 2 | ||||
| -rw-r--r-- | example/asm_box_x86_32.py | 2 | ||||
| -rw-r--r-- | example/asm_box_x86_32_enc.py | 2 | ||||
| -rw-r--r-- | example/asm_box_x86_32_mod.py | 2 | ||||
| -rw-r--r-- | example/asm_box_x86_32_mod_self.py | 2 | ||||
| -rw-r--r-- | example/asm_box_x86_32_repmod.py | 2 | ||||
| -rw-r--r-- | example/asm_box_x86_64.py | 2 | ||||
| -rw-r--r-- | example/asm_mips32.py | 33 | ||||
| -rw-r--r-- | example/asm_msp430_sc.py | 2 | ||||
| -rw-r--r-- | example/asm_x86.py | 2 | ||||
| -rw-r--r-- | miasm2/core/asmbloc.py | 15 |
13 files changed, 40 insertions, 30 deletions
diff --git a/example/asm_arm.py b/example/asm_arm.py index a3e85cde..b891ba1a 100644 --- a/example/asm_arm.py +++ b/example/asm_arm.py @@ -73,7 +73,7 @@ print "symbols" print symbol_pool # dont erase from start to shell code padading resolved_b, patches = asmbloc.asm_resolve_final( - my_mn, 'arm', blocs[0], symbol_pool) + my_mn, blocs[0], symbol_pool) print patches for offset, raw in patches.items(): diff --git a/example/asm_arm_sc.py b/example/asm_arm_sc.py index 3c96742d..71f2d716 100644 --- a/example/asm_arm_sc.py +++ b/example/asm_arm_sc.py @@ -54,7 +54,7 @@ for b in blocs[0]: print b resolved_b, patches = asmbloc.asm_resolve_final( - mn_arm, "arm", blocs[0], symbol_pool) + mn_arm, blocs[0], symbol_pool) print patches for offset, raw in patches.items(): diff --git a/example/asm_armt.py b/example/asm_armt.py index 432d4101..c95c4bac 100644 --- a/example/asm_armt.py +++ b/example/asm_armt.py @@ -68,7 +68,7 @@ print "symbols" print symbol_pool # dont erase from start to shell code padading resolved_b, patches = asmbloc.asm_resolve_final( - my_mn, 'armt', blocs[0], symbol_pool) + my_mn, blocs[0], symbol_pool) print patches diff --git a/example/asm_box_x86_32.py b/example/asm_box_x86_32.py index 2fa63c78..c11e645a 100644 --- a/example/asm_box_x86_32.py +++ b/example/asm_box_x86_32.py @@ -57,7 +57,7 @@ for b in blocs[0]: print b resolved_b, patches = asmbloc.asm_resolve_final( - mn_x86, 32, blocs[0], symbol_pool) + mn_x86, blocs[0], symbol_pool) print patches for offset, raw in patches.items(): diff --git a/example/asm_box_x86_32_enc.py b/example/asm_box_x86_32_enc.py index 7f1ef7ec..b06fa1ea 100644 --- a/example/asm_box_x86_32_enc.py +++ b/example/asm_box_x86_32_enc.py @@ -87,7 +87,7 @@ print "symbols" print symbol_pool resolved_b, patches = asmbloc.asm_resolve_final( - mn_x86, 32, blocs[0], symbol_pool) + mn_x86, blocs[0], symbol_pool) print patches ad_start = symbol_pool.getby_name_create("msgbox_encrypted_start").offset diff --git a/example/asm_box_x86_32_mod.py b/example/asm_box_x86_32_mod.py index f9f53f58..5f90fe9c 100644 --- a/example/asm_box_x86_32_mod.py +++ b/example/asm_box_x86_32_mod.py @@ -80,7 +80,7 @@ for b in blocs[0]: print b resolved_b, patches = asmbloc.asm_resolve_final( - mn_x86, 32, blocs[0], symbol_pool) + mn_x86, blocs[0], symbol_pool) print patches for offset, raw in patches.items(): diff --git a/example/asm_box_x86_32_mod_self.py b/example/asm_box_x86_32_mod_self.py index 95898722..0efe4811 100644 --- a/example/asm_box_x86_32_mod_self.py +++ b/example/asm_box_x86_32_mod_self.py @@ -65,7 +65,7 @@ for b in blocs[0]: print b resolved_b, patches = asmbloc.asm_resolve_final( - mn_x86, 32, blocs[0], symbol_pool) + mn_x86, blocs[0], symbol_pool) print patches for offset, raw in patches.items(): diff --git a/example/asm_box_x86_32_repmod.py b/example/asm_box_x86_32_repmod.py index f351fcfa..c46fedd5 100644 --- a/example/asm_box_x86_32_repmod.py +++ b/example/asm_box_x86_32_repmod.py @@ -94,7 +94,7 @@ for b in blocs[0]: print b resolved_b, patches = asmbloc.asm_resolve_final( - mn_x86, 32, blocs[0], symbol_pool) + mn_x86, blocs[0], symbol_pool) print patches for offset, raw in patches.items(): diff --git a/example/asm_box_x86_64.py b/example/asm_box_x86_64.py index 3ae4bcb5..d48a1729 100644 --- a/example/asm_box_x86_64.py +++ b/example/asm_box_x86_64.py @@ -58,7 +58,7 @@ for b in blocs[0]: print b resolved_b, patches = asmbloc.asm_resolve_final( - mn_x86, 64, blocs[0], symbol_pool, + mn_x86, blocs[0], symbol_pool, max_offset=0xFFFFFFFFFFFFFFFF) print patches diff --git a/example/asm_mips32.py b/example/asm_mips32.py index 83e7a90b..aec57886 100644 --- a/example/asm_mips32.py +++ b/example/asm_mips32.py @@ -25,9 +25,10 @@ my_var_parser = parse_ast(my_ast_id2expr, my_ast_int2expr) base_expr.setParseAction(my_var_parser) -st = StrPatchwork() +st_l = StrPatchwork() +st_b = StrPatchwork() -blocs, symbol_pool = parse_asm.parse_txt(mn_mips32, "l", ''' +txt = ''' main: ADDIU A0, ZERO, 0x10 ADDIU A1, ZERO, 0 @@ -40,19 +41,29 @@ loop: MOVN A1, ZERO, ZERO JR RA ADDIU A2, A2, 0x1 -''') +''' + +blocs_b, symbol_pool_b = parse_asm.parse_txt(mn_mips32, "b", txt) +blocs_l, symbol_pool_l = parse_asm.parse_txt(mn_mips32, "l", txt) # fix shellcode addr -symbol_pool.set_offset(symbol_pool.getby_name("main"), 0) +symbol_pool_b.set_offset(symbol_pool_b.getby_name("main"), 0) +symbol_pool_l.set_offset(symbol_pool_l.getby_name("main"), 0) -for b in blocs[0]: +for b in blocs_b[0]: print b -resolved_b, patches = asmbloc.asm_resolve_final( - mn_mips32, 'l', blocs[0], symbol_pool) -print patches +resolved_b, patches_b = asmbloc.asm_resolve_final( + mn_mips32, blocs_b[0], symbol_pool_b) +resolved_l, patches_l = asmbloc.asm_resolve_final( + mn_mips32, blocs_l[0], symbol_pool_l) +print patches_b +print patches_l -for offset, raw in patches.items(): - st[offset] = raw +for offset, raw in patches_b.items(): + st_b[offset] = raw +for offset, raw in patches_l.items(): + st_l[offset] = raw -open('mips32_sc.bin', 'wb').write(str(st)) +open('mips32_sc_b.bin', 'wb').write(str(st_l)) +open('mips32_sc_l.bin', 'wb').write(str(st_l)) diff --git a/example/asm_msp430_sc.py b/example/asm_msp430_sc.py index 5dee56fb..c0bae929 100644 --- a/example/asm_msp430_sc.py +++ b/example/asm_msp430_sc.py @@ -45,7 +45,7 @@ for b in blocs[0]: print b resolved_b, patches = asmbloc.asm_resolve_final( - mn_msp430, None, blocs[0], symbol_pool) + mn_msp430, blocs[0], symbol_pool) print patches for offset, raw in patches.items(): diff --git a/example/asm_x86.py b/example/asm_x86.py index b9f2cc5b..77fc61dc 100644 --- a/example/asm_x86.py +++ b/example/asm_x86.py @@ -79,7 +79,7 @@ mystr: symbol_pool.set_offset(symbol_pool.getby_name("main"), 0x0) s = StrPatchwork() resolved_b, patches = asmbloc.asm_resolve_final( - mn_x86, '32', blocs[0], symbol_pool) + mn_x86, blocs[0], symbol_pool) for offset, raw in patches.items(): s[offset] = raw diff --git a/miasm2/core/asmbloc.py b/miasm2/core/asmbloc.py index ac778280..b80dd1e3 100644 --- a/miasm2/core/asmbloc.py +++ b/miasm2/core/asmbloc.py @@ -618,7 +618,7 @@ shape = "box" return out -def conservative_asm(mnemo, mode, instr, symbols, conservative): +def conservative_asm(mnemo, instr, symbols, conservative): """ Asm instruction; Try to keep original instruction bytes if it exists @@ -647,7 +647,7 @@ def fix_expr_val(e, symbols): return e -def guess_blocs_size(mnemo, mode, blocs, symbols): +def guess_blocs_size(mnemo, blocs, symbols): """ Asm and compute max bloc length """ @@ -952,7 +952,7 @@ def calc_symbol_offset(symbol_pool): s_to_use.add(l) -def asmbloc_final(mnemo, mode, blocs, symbol_pool, symb_reloc_off=None, conservative = False): +def asmbloc_final(mnemo, blocs, symbol_pool, symb_reloc_off=None, conservative = False): log_asmbloc.info("asmbloc_final") if symb_reloc_off is None: symb_reloc_off = {} @@ -1002,7 +1002,7 @@ def asmbloc_final(mnemo, mode, blocs, symbol_pool, symb_reloc_off=None, conserva symbol_reloc_off = [] old_l = instr.l c, candidates = conservative_asm( - mnemo, mode, instr, symbol_reloc_off, conservative) + mnemo, instr, symbol_reloc_off, conservative) # print candidates for i, e in enumerate(sav_a): @@ -1050,19 +1050,18 @@ def asmbloc_final(mnemo, mode, blocs, symbol_pool, symb_reloc_off=None, conserva symb_reloc_off[a] = b -def asm_resolve_final(mnemo, mode, blocs, symbol_pool, dont_erase=[], +def asm_resolve_final(mnemo, blocs, symbol_pool, dont_erase=[], max_offset=0xFFFFFFFF, symb_reloc_off=None, constrain_pos=False): if symb_reloc_off is None: symb_reloc_off = {} - # asmbloc(mnemo, mode, blocs, symbol_pool) - guess_blocs_size(mnemo, mode, blocs, symbol_pool) + guess_blocs_size(mnemo, blocs, symbol_pool) bloc_g = group_blocs(blocs) resolved_b = resolve_symbol(bloc_g, symbol_pool, dont_erase=dont_erase, max_offset=max_offset) - asmbloc_final(mnemo, mode, resolved_b, symbol_pool, symb_reloc_off) + asmbloc_final(mnemo, resolved_b, symbol_pool, symb_reloc_off) written_bytes = {} patches = {} for b, t in resolved_b: |