AlexeySoshin / smali2java

Recreate Java code from Smali
493 stars 85 forks source link

Crash with a smali file declaring varargs abstract method #21

Open vricosti opened 3 years ago

vricosti commented 3 years ago

Hi,

I was curious to test smali2java on a dissasembled apk but I have an exception: `Found cso.smali panic: runtime error: slice bounds out of range [:-1]

goroutine 1 [running]: github.com/alexeysoshin/smali2java/parser.(MethodParser).Parse(0xc0003a9810, 0xc0003a9a40, 0xc00012f630, 0x5, 0x5, 0x0, 0x0) c:/Apps/ReverseEngineering/smali2java/parser/method.go:84 +0x206f github.com/alexeysoshin/smali2java/parser.(JavaFile).ParseLine(0xc0003a9a40, 0xc000147170, 0x2a, 0x0, 0x0) c:/Apps/ReverseEngineering/smali2java/parser/java_file.go:117 +0x179e`

cso.smali.txt

The problem is with the following lines:

.method public varargs abstract g([Lntb;)V .end method

Inside MethodParser.Parse the variable smaliMethod holds the strings "abstract" so the search for () fails and argumentsIndex/returnValueIndex are -1.

splitLine badindex

Update:

I have added the following lines to fix it:

if currentLine[methodNameIndex] == java.Abstract { staticOrAbstract = java.Abstract methodNameIndex++ }

vricosti commented 3 years ago

From what I understand you don't keep track of what you have already parsed, so your tool could be a lot improved if you build an abtrasct syntax tree (ast) and it would allow to decode more smali.

AlexeySoshin commented 3 years ago

Thank you for the detailed report.

I'm happy to accept the PR with this fix, or alternatively, I can add this fix myself in another week or two.

daren-k commented 3 years ago

Hi @vricosti @AlexeySoshin,

I run it to the same issues it this fix on a PR or was already promote to the master??