mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-02-12 01:30:00 -06:00
GP-1062 compacted and fixed issues with function start patterns
This commit is contained in:
@@ -1,5 +1,27 @@
|
||||
<patternlist>
|
||||
<patternpairs totalbits="32" postbits="16">
|
||||
|
||||
<patternpairs totalbits="32" postbits="21">
|
||||
<!-- Higher confidence patterns, after a return and more defined bits -->
|
||||
<prepatterns>
|
||||
<data>0x0d 0xf0</data> <!-- ret //0 filler -->
|
||||
<data>0x0d 0xf0 0x00 </data> <!-- ret //1 filler -->
|
||||
<data>0x0d 0xf0 0x00 0x00 </data> <!-- ret //2 filler -->
|
||||
<data>0x0d 0xf0 0x00 0x00 0x00 </data> <!-- ret //3 filler -->
|
||||
|
||||
<data>0x80 0x00 0x00 </data> <!-- ret //0 filler -->
|
||||
<data>0x80 0x00 0x00 0x00 </data> <!-- ret //1 filler -->
|
||||
<data>0x80 0x00 0x00 0x00 0x00 </data> <!-- ret //2 filler -->
|
||||
<data>0x80 0x00 0x00 0x00 0x00 0x00 </data> <!-- ret //3 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000 </data> <!-- addi a1,a1,-imm // this only includes stack frame size 0x10->0x80 -->
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000 </data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<!-- this currently applies to the pre-pattern start, so can't use really should be on postpattern start <align mark="0" bits="2"/> -->
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
|
||||
<patternpairs totalbits="32" postbits="21">
|
||||
<prepatterns>
|
||||
<data>0x1d 0xf0</data> <!-- retw.n -->
|
||||
<data>0x1d 0xf0 0x00</data> <!-- retw.n -->
|
||||
@@ -11,231 +33,54 @@
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="40" postbits="21">
|
||||
<prepatterns>
|
||||
<data>00001101 11110000</data> <!-- ret.n //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart after="func"/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
|
||||
<patternpairs totalbits="48" postbits="21">
|
||||
<prepatterns>
|
||||
<data>00001101 11110000 00000000</data> <!-- ret.n //1 filler -->
|
||||
<data>..000110 ........ 1.......</data> <!-- j -off //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="48" postbits="21">
|
||||
<prepatterns>
|
||||
<data>10000000 00000000 00000000</data> <!-- ret //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart after="func"/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="56" postbits="21">
|
||||
<prepatterns>
|
||||
<data>10000000 00000000 00000000 00000000</data> <!-- ret //1 filler -->
|
||||
<data>00001101 11110000 00000000 00000000</data> <!-- ret.n //2 filler -->
|
||||
<data>..000110 ........ 1....... 00000000</data> <!-- j -off //1 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="56" postbits="24">
|
||||
<prepatterns>
|
||||
<data>....1010 00010001 00001101 11110000</data> <!-- add.n a1,a1,at ; ret.n //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart after="func"/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="64" postbits="21">
|
||||
<prepatterns>
|
||||
<data>10000000 00000000 00000000 00000000 00000000</data> <!-- ret //2 filler -->
|
||||
<data>00001101 11110000 00000000 00000000 00000000</data> <!-- ret.n //3 filler -->
|
||||
<data>..000110 ........ 1....... 00000000 00000000</data> <!-- j -off //2 filler -->
|
||||
<data>....1010 00010001 00001101 11110000 00000000</data> <!-- add.n a1,a1,at ; ret.n //1 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="64" postbits="24">
|
||||
<prepatterns>
|
||||
<data>00010010 11000001 0...0000 00001101 11110000</data> <!-- addi a1,a1,off ; ret.n //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart after="func"/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="48" postbits="21">
|
||||
<prepatterns>
|
||||
<data>10000000 00000000 00000000 00000000 00000000 00000000</data> <!-- ret //3 filler -->
|
||||
<data>00010010 11000001 0...0000 00001101 11110000 00000000</data> <!-- addi a1,a1,off ; ret.n //1 filler -->
|
||||
<data>..000110 ........ 1....... 00000000 00000000 00000000</data> <!-- j -off //3 filler -->
|
||||
<data>....1010 00010001 00001101 11110000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //2 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="64" postbits="21">
|
||||
<prepatterns>
|
||||
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //2 filler -->
|
||||
<data>....1010 00010001 00001101 11110000 00000000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //3 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="80" postbits="21">
|
||||
<prepatterns>
|
||||
<data>00010010 11000001 0...0000 00001101 11110000</data> <!-- addi a1,a1,off ; ret.n //0 filler -->
|
||||
<data>00010010 11000001 0...0000 00001101 11110000 00000000</data> <!-- addi a1,a1,off ; ret.n //1 filler -->
|
||||
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //2 filler -->
|
||||
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //3 filler -->
|
||||
|
||||
<data>....1010 00010001 00001101 11110000 </data> <!-- add.n a1,a1,at ; ret.n //0 filler -->
|
||||
<data>....1010 00010001 00001101 11110000 00000000</data> <!-- add.n a1,a1,at ; ret.n //1 filler -->
|
||||
<data>....1010 00010001 00001101 11110000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //2 filler -->
|
||||
<data>....1010 00010001 00001101 11110000 00000000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //3 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<align mark="0" bits="3"/>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1,a1,-off -->
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<!-- this currently applies to the pre-pattern start, so can't use really should be on postpattern start <align mark="0" bits="2"/> -->
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="37" postbits="29">
|
||||
|
||||
<patternpairs totalbits="28" postbits="21">
|
||||
<prepatterns>
|
||||
<data>00001101 11110000</data> <!-- ret.n //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart after="func"/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="36" postbits="29">
|
||||
<prepatterns>
|
||||
<data>00001101 11110000 00000000</data> <!-- ret.n //1 filler -->
|
||||
<data>..000110 ........ 1.......</data> <!-- j -off //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="50" postbits="29">
|
||||
<prepatterns>
|
||||
<data>10000000 00000000 00000000</data> <!-- ret //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart after="func"/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="44" postbits="29"> <!-- Main patterns -->
|
||||
<prepatterns>
|
||||
<data>00001101 11110000 00000000 00000000</data> <!-- ret.n //2 filler -->
|
||||
<data>..000110 ........ 1....... 00000000</data> <!-- j -off //1 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="47" postbits="29">
|
||||
<prepatterns>
|
||||
<data>....1010 00010001 00001101 11110000</data> <!-- add.n a1,a1,at ; ret.n //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart after="func"/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="52" postbits="29">
|
||||
<prepatterns>
|
||||
<data>00001101 11110000 00000000 00000000 00000000</data> <!-- ret.n //3 filler -->
|
||||
<data>..000110 ........ 1....... 00000000 00000000</data> <!-- j -off //2 filler -->
|
||||
<data>....1010 00010001 00001101 11110000 00000000</data> <!-- add.n a1,a1,at ; ret.n //1 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="60" postbits="29">
|
||||
<prepatterns>
|
||||
<data>00010010 11000001 0...0000 00001101 11110000</data> <!-- addi a1,a1,off ; ret.n //0 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart after="func"/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="60" postbits="29">
|
||||
<prepatterns>
|
||||
<data>00010010 11000001 0...0000 00001101 11110000 00000000</data> <!-- addi a1,a1,off ; ret.n //1 filler -->
|
||||
<data>..000110 ........ 1....... </data> <!-- j -off //0 filler -->
|
||||
<data>..000110 ........ 1....... 00000000 </data> <!-- j -off //1 filler -->
|
||||
<data>..000110 ........ 1....... 00000000 00000000 </data> <!-- j -off //2 filler -->
|
||||
<data>..000110 ........ 1....... 00000000 00000000 00000000</data> <!-- j -off //3 filler -->
|
||||
<data>....1010 00010001 00001101 11110000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //2 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="64" postbits="29">
|
||||
<prepatterns>
|
||||
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //2 filler -->
|
||||
<data>....1010 00010001 00001101 11110000 00000000 00000000 00000000</data> <!-- add.n a1,a1,at ; ret.n //3 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
<patternpairs totalbits="64" postbits="29">
|
||||
<prepatterns>
|
||||
<data>00010010 11000001 0...0000 00001101 11110000 00000000 00000000 00000000</data> <!-- addi a1,a1,off ; ret.n //3 filler -->
|
||||
</prepatterns>
|
||||
<postpatterns>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<align mark="0" bits="3"/>
|
||||
<funcstart/>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1, a1, -offset -->
|
||||
<!-- this currently applies to the pre-pattern start, so can't use really should be on postpattern start <align mark="0" bits="2"/> -->
|
||||
<possiblefuncstart/>
|
||||
</postpatterns>
|
||||
</patternpairs>
|
||||
|
||||
<pattern>
|
||||
<data>....0010 10100... ........ ....0000 00010001 11000000</data> <!-- movi at,off ; subi a1,a1,at -->
|
||||
<funcstart after="data" />
|
||||
<align mark="0" bits="2"/>
|
||||
<possiblefuncstart after="defined" />
|
||||
</pattern>
|
||||
|
||||
<pattern>
|
||||
<data>00010010 11000001 1...0000</data> <!-- addi a1, a1, -offset -->
|
||||
<funcstart after="data" />
|
||||
<align mark="0" bits="2"/>
|
||||
<possiblefuncstart after="defined" />
|
||||
</pattern>
|
||||
|
||||
<pattern>
|
||||
<data>0x12 0xc1 0xf0 0x09 0x01 ..000101 ........ ........ 0x08 0x01 0x12 0xc1 0x10 0x0d 0xf0</data>
|
||||
<!--
|
||||
@@ -246,7 +91,7 @@
|
||||
addi a1,a1,0x10
|
||||
ret.n
|
||||
-->
|
||||
<align mark="0" bits="3" />
|
||||
<align mark="0" bits="2" />
|
||||
<funcstart validcode="function" thunk="true" />
|
||||
</pattern>
|
||||
</patternlist>
|
||||
|
||||
Reference in New Issue
Block a user