asmbloc: remove un needed mode in asm function

This commit is contained in:
Fabrice Desclaux
2014-10-08 17:59:45 +02:00
parent faae3a839c
commit 2f4d1bf249
13 changed files with 40 additions and 30 deletions
+1 -1
View File
@@ -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():
+1 -1
View File
@@ -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
View File
@@ -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
+1 -1
View File
@@ -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():
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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():
+1 -1
View File
@@ -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():
+1 -1
View File
@@ -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():
+1 -1
View File
@@ -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
View File
@@ -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))
+1 -1
View File
@@ -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
View File
@@ -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
+7 -8
View File
@@ -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: