diff options
| author | Camille Mougey <commial@gmail.com> | 2015-08-10 16:10:55 +0200 |
|---|---|---|
| committer | Camille Mougey <commial@gmail.com> | 2015-08-10 16:10:55 +0200 |
| commit | bd47054b59077cc6b0aa91b3a542bc5bf2c12ff8 (patch) | |
| tree | f75283277ee1ec555a37dd817c41bb695092370f /example | |
| parent | dcc488ec39d9a96b70c728ccdbcd43e62b25ae99 (diff) | |
| parent | 6c9e46d8d2c2f0b34f025ec2381015bbfa9eb34e (diff) | |
| download | miasm-bd47054b59077cc6b0aa91b3a542bc5bf2c12ff8.tar.gz miasm-bd47054b59077cc6b0aa91b3a542bc5bf2c12ff8.zip | |
Merge pull request #206 from serpilliere/aarch64
Aarch64
Diffstat (limited to 'example')
| -rw-r--r-- | example/ida/utils.py | 34 | ||||
| -rw-r--r-- | example/jitter/sandbox_elf_aarch64l.py | 28 | ||||
| -rw-r--r-- | example/samples/aarch64_simple.S | 17 | ||||
| -rwxr-xr-x | example/samples/md5_aarch64l | bin | 0 -> 18888 bytes |
4 files changed, 66 insertions, 13 deletions
diff --git a/example/ida/utils.py b/example/ida/utils.py index 5a0e4c83..8a7ecccb 100644 --- a/example/ida/utils.py +++ b/example/ida/utils.py @@ -5,21 +5,27 @@ from miasm2.analysis.machine import Machine from miasm2.ir.translators import Translator import miasm2.expression.expression as m2_expr +def max_size_to_size(max_size): + for size in [16, 32, 64]: + if (1 << size) - 1 == max_size: + return size + return None def guess_machine(): "Return an instance of Machine corresponding to the IDA guessed processor" processor_name = GetLongPrm(INF_PROCNAME) + max_size = GetLongPrm(INF_START_SP) + size = max_size_to_size(max_size) if processor_name == "metapc": # HACK: check 32/64 using INF_START_SP - max_size = GetLongPrm(INF_START_SP) if max_size == 0x80: # TODO XXX check machine = Machine("x86_16") - elif max_size == 0xFFFFFFFF: + elif size == 32: machine = Machine("x86_32") - elif max_size == 0xFFFFFFFFFFFFFFFF: + elif size == 64: machine = Machine("x86_64") else: raise ValueError('cannot guess 32/64 bit! (%x)' % max_size) @@ -27,18 +33,20 @@ def guess_machine(): # TODO ARM/thumb # hack for thumb: set armt = True in globals :/ # set bigendiant = True is bigendian + # Thumb, size, endian + info2machine = {(True, 32, True): "armtb", + (True, 32, False): "armtl", + (False, 32, True): "armb", + (False, 32, False): "arml", + (False, 64, True): "aarch64b", + (False, 64, False): "aarch64l", + } is_armt = globals().get('armt', False) is_bigendian = globals().get('bigendian', False) - if is_armt: - if is_bigendian: - machine = Machine("armtb") - else: - machine = Machine("armtl") - else: - if is_bigendian: - machine = Machine("armb") - else: - machine = Machine("arml") + infos = (is_armt, size, is_bigendian) + if not infos in info2machine: + raise NotImplementedError('not fully functional') + machine = Machine(info2machine[infos]) from miasm2.analysis.disasm_cb import guess_funcs, guess_multi_cb from miasm2.analysis.disasm_cb import arm_guess_subcall, arm_guess_jump_table diff --git a/example/jitter/sandbox_elf_aarch64l.py b/example/jitter/sandbox_elf_aarch64l.py new file mode 100644 index 00000000..0a4c88db --- /dev/null +++ b/example/jitter/sandbox_elf_aarch64l.py @@ -0,0 +1,28 @@ +import os +from pdb import pm +from miasm2.analysis.sandbox import Sandbox_Linux_aarch64l +from miasm2.jitter.jitload import log_func +import logging + + +# Python auto completion +filename = os.environ.get('PYTHONSTARTUP') +if filename and os.path.isfile(filename): + execfile(filename) + +# Insert here user defined methods + +# Parse arguments +parser = Sandbox_Linux_aarch64l.parser(description="ELF sandboxer") +parser.add_argument("filename", help="ELF Filename") +options = parser.parse_args() + +# Create sandbox +sb = Sandbox_Linux_aarch64l(options.filename, options, globals()) + +log_func.setLevel(logging.ERROR) + +# Run +sb.run() + +assert(sb.jitter.run is False) diff --git a/example/samples/aarch64_simple.S b/example/samples/aarch64_simple.S new file mode 100644 index 00000000..f786f168 --- /dev/null +++ b/example/samples/aarch64_simple.S @@ -0,0 +1,17 @@ +main: + SUB SP, SP, 0x10 + STRB W0, [SP,0xF] + LDRB W0, [SP,0xF] + CMP W0, 0x1F + B.LS is_print + LDRB W0, [SP,0xF] + CMP W0, 0x7E + B.HI is_print + MOVZ W0, 1 + B ret_ +is_print: + MOVZ W0, 0 + +ret_: + ADD SP, SP, 0x10 + RET LR \ No newline at end of file diff --git a/example/samples/md5_aarch64l b/example/samples/md5_aarch64l new file mode 100755 index 00000000..700b58bd --- /dev/null +++ b/example/samples/md5_aarch64l Binary files differ |