about summary refs log tree commit diff stats
path: root/example
diff options
context:
space:
mode:
Diffstat (limited to 'example')
-rw-r--r--example/ida/utils.py34
-rw-r--r--example/jitter/sandbox_elf_aarch64l.py28
-rw-r--r--example/samples/aarch64_simple.S17
-rwxr-xr-xexample/samples/md5_aarch64lbin0 -> 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