diff options
| author | serpilliere <devnull@localhost> | 2011-07-27 11:12:04 +0200 |
|---|---|---|
| committer | serpilliere <devnull@localhost> | 2011-07-27 11:12:04 +0200 |
| commit | 066972d7f1e30792256c137ad2417a0adaee7753 (patch) | |
| tree | c2d020ed21b556e8e5c926aa2dc97ce34dc4885a /example/asm_arm.py | |
| download | miasm-066972d7f1e30792256c137ad2417a0adaee7753.tar.gz miasm-066972d7f1e30792256c137ad2417a0adaee7753.zip | |
realease commit
Diffstat (limited to 'example/asm_arm.py')
| -rwxr-xr-x | example/asm_arm.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/example/asm_arm.py b/example/asm_arm.py new file mode 100755 index 00000000..b146a362 --- /dev/null +++ b/example/asm_arm.py @@ -0,0 +1,68 @@ +#! /usr/bin/env python + +from miasm.arch.arm_arch import arm_mn +from miasm.core.bin_stream import bin_stream +from miasm.core import parse_asm +from miasm.core import asmbloc +import struct + +my_mn = arm_mn + + +####filelogger sc#### + +all_bloc, symbol_pool = parse_asm.parse_txt(my_mn,r''' +toto: + STMFD SP!, {R0-R12, LR}^ + MOV R11, LR + MOV R11, R0, ROR 4 + STC P2,C3, [R5, 24]! + MOV R1, R0 + LDR R2, [PC, R0 ROR 0x2] + CMP R2, R3 + BLE tutu + ORR R0, R1, R2 + ORRLE R0, R0, R0 + ORR R0, R0, R0 + LDR R3, [R11, 0x98] + LDR R3, [R11, -0x98] + STMFD SP!, {R4-R6,R11,R12,LR,PC} + STMFD SP!, {R0-R12, SP, LR, PC} + LDMIA R9, {R9, R12} + BLE tutu + LDMFD SP, {R4-R8,R11,SP,PC} + +tutu: + LDMFD SP!, {R0-R12, LR} + BX LR +''') + +g = asmbloc.bloc2graph(all_bloc[0]) +open("graph.txt" , "w").write(g) + + + +for b in all_bloc[0]: + print b +symbol_pool.add(asmbloc.asm_label('base_address', 0x0)) +symbol_pool.getby_name("toto").offset = 0x0 + +resolved_b, patches = asmbloc.asm_resolve_final(my_mn, all_bloc[0], symbol_pool) +print patches + +f = open('uu.bin', 'w') +for p, v in patches.items(): + f.seek(p) + f.write(v) + +f.close() + +print 'DISASSEMBLE FILE' +data = open('uu.bin', 'rb').read() +in_str = bin_stream(data) +job_done = set() +symbol_pool = asmbloc.asm_symbol_pool() +all_bloc = asmbloc.dis_bloc_all(my_mn, in_str, 0, job_done, symbol_pool, follow_call = False, lines_wd = 20) +g = asmbloc.bloc2graph(all_bloc) +open("graph2.txt" , "w").write(g) + |