Imported Upstream version 2.0.1
[packages/binwalk.git] / src / binwalk / magic / binarch
1 # MIPS prologue
2 # addiu $sp, -XX
3 # sw XX, XX($sp)
4 # 27 BD FF XX
5 # AF BX XX XX
6 0       string          \xFF\xBD\x27    MIPSEL instructions, function prologue{offset-adjust:-1}
7 >6      byte            !0xAF                   (invalid)
8 >5      byte&0xE0       !0xA0                   (invalid)
9
10 0       string          \x27\xBD\xFF    MIPS instructions, function prologue
11 >4      byte            !0xAF                   (invalid)
12 >5      byte&0xE0       !0xA0                   (invalid)
13
14 # MIPS epilogue
15 # jr $ra
16 # addiu $sp, XX
17 #
18 # addiu $sp, XX
19 # jr $ra
20 0       belong  0x03e00008      MIPS instructions, function epilogue
21 >4      beshort !0x27BD         (invalid)
22 0       beshort 0x27BD          MIPS instructions, function epilogue
23 >2      belong  !0x03e00008     (invalid)
24
25 0       lelong  0x03e00008      MIPSEL instructions, function epilogue
26 >6      leshort !0x27BD         (invalid)
27 0       leshort 0x27BD          MIPS instructions, function epilogue
28 >2      lelong  !0x03e00008     (invalid)
29
30 # MIPS16e
31 # nop (x4)
32 # TODO: Produces false positives when scanning ARM Thumb code
33 #0      string  \x65\x00\x65\x00\x65\x00\x65\x00        MIPS16e instructions, nops{jump-to-offset:8}
34 #0      string  \x00\x65\x00\x65\x00\x65\x00\x65        MIPSEL16e instructions, nops{jump-to-offset:8}
35
36 # save a0-a1, XX
37 # addiu XX, XX
38 0       string  \xf0\x08\x64    MIPS16e instructions, function prologue
39 >4      byte    !0x01                   (invalid)
40
41 # move $sp, $s1
42 # restore XX, XX, XX
43 # jrc $ra
44 0       beshort 0x65B9                  MIPS16e instructions, function epilogue
45 >3      byte    !0x64                   (invalid)
46 >4      beshort !0xE8A0                 (invalid)
47 0       leshort 0x65B9                  MIPSEL16e instructions, function epilogue
48 >3      byte    !0x64                   (invalid)
49 >4      leshort !0xE8A0                 (invalid)
50
51 # jrc $ra
52 # nop
53 0       belong  0xe8a06500              MIPS16e instructions, function epilogue
54 0       lelong  0xe8a06500              MIPSEL16e instructions, function epilogue
55
56 # PowerPC prologue
57 # mflr r0
58 0       belong 0x7C0802A6       PowerPC big endian instructions, function prologue
59 0       lelong 0x7C0802A6       PowerPC little endian instructions, function prologue
60
61 # PowerPC epilogue
62 # blr
63 0       belong 0x4E800020       PowerPC big endian instructions, function epilogue
64 0       lelong 0x4E800020       PowerPC little endian instructions, function epilogue
65
66 # TODO: Add ARM Thumb dectection
67 # ARM prologue
68 # STMFD SP!, {XX}
69 # <any instruction whose opcode begins with 0xE>
70 0       beshort         0xE92D  ARMEB instructions, function prologue
71 >4      byte&0xF0       !0xE0   (invalid)
72 >8      byte&0xF0       !0xE0   (invalid)
73 0       leshort         0xE92D  ARM instructions, function prologue{offset-adjust:-2}
74 >5      byte&0xF0       !0xE0   (invalid)
75 >9      byte&0xF0       !0xE0   (invalid)
76
77 # ARM epilogue
78 # MOV R0, XX
79 # LDMFD SP!, {XX}
80 0       beshort         0xE1A0  ARMEB instructions, function epilogue
81 >4      beshort         !0xE8BD (invalid)
82 0       leshort         0xE1A0  ARM instructions, function epilogue{offset-adjust:-2}
83 >4      leshort         !0xE8BD (invalid)
84
85
86 # Ubicom32 prologue
87 # move.4 -4($sp)++, $ra
88 0       belong  0x02FF6125      Ubicom32 instructions, function prologue
89
90 # Ubicom32 epilogues
91 # calli $ra, 0($ra)
92 # ret ($sp)4++
93 0       belong  0xF0A000A0      Ubicom32 instructions, function epilogue
94 0       belong  0x000022E1      Ubicom32 instructions, function epilogue
95
96 # AVR8 prologue
97 # push r28
98 # push r29
99 0       belong  0x93CF93DF      AVR8 instructions, function prologue
100 0       belong  0x93DF93CF      AVR8 instructions, function prologue
101
102 # AVR32 prologue
103 # pushm   r7,lr
104 # mov r7,sp
105 0       string  \xEB\xCD\x40\x80\x1A\x97        AVR32 instructions, function prologue
106
107 # SPARC eiplogue
108 # ret
109 # restore XX
110 0       string  \x81\xC7\xE0\x08\x81\xE8        SPARC instructions, function epilogue
111
112 # x86 epilogue
113 # push ebp
114 # move ebp, esp
115 # sub esp, XX
116 #
117 # push ebp
118 # move ebp, esp
119 # push edi
120 # push esi
121 0       string  \x55\x89\xE5\x83\xEC                            Intel x86 instructions, function prologue
122 0       string  \x55\x89\xE5\x57\x56                            Intel x86 instructions, function prologue
123 0       string  \x90\x90\x90\x90\x90\x90\x90\x90        Intel x86 instructions, nops{jump-to-offset:8}
124