mirror of
https://github.com/cea-sec/miasm
synced 2026-06-21 13:48:18 +00:00
asmbloc: remove un needed mode in asm function
This commit is contained in:
+1
-1
@@ -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():
|
||||
|
||||
@@ -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():
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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():
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
+22
-11
@@ -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))
|
||||
|
||||
@@ -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():
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user