testwhat / SmaliEx

A wrapper to get de-optimized dex from odex/oat/vdex.
529 stars 142 forks source link

Unresolved INVOKE_VIRTUAL_QUICK_ART mIdx=16 objReg=3, use Ljava/lang/String; to invoke (it may have exception but is expected) #3

Closed mmhobi7 closed 7 years ago

mmhobi7 commented 9 years ago

While deodexing hammerhead M preview 1.

07-13 12:47:03:224 Preparing bootclasspath from /home/aaahh/deodex/system/framework/arm/odex 07-13 12:47:03:501 De-optimizing /system/framework/core-libart.jar 07-13 12:47:05:818 Analysis info of Landroid/icu/impl/PluralRulesLoader; : : Unresolved INVOKE_VIRTUAL_QUICK_ART mIdx=16 objReg=3, use Ljava/lang/String; to invoke (it may have exception but is expected)

07-13 12:47:26:445 Output to /home/aaahh/deodex/system/framework/arm/dex/core-libart.dex

Used command: java -jar oat2dex.jar boot system/framework/arm/boot.oat

mmhobi7 commented 9 years ago

It's causing me problems... Framework.jar is trash. Is there anything I can do to help you fix this faster? Is there anything I can do on my end? If not can you show me what to do or point me to anything?

mmhobi7 commented 9 years ago

Tried M preview 2 (android-m-preview-1)

08-05 21:35:46:650 Analysis info of Landroid/icu/impl/PluralRulesLoader; : : Unresolved INVOKE_VIRTUAL_QUICK_ART mIdx=16 objReg=3, use Ljava/lang/String; to invoke (it may have exception but is expected)

08-05 21:35:54:433 Output to /home/aaahh/d/tmp/framework/arm/dex/core-libart.dex 08-05 21:35:54:434 De-optimizing /system/framework/conscrypt.jar

mmhobi7 commented 9 years ago

So I did research, found out about this: https://android.googlesource.com/platform/art/+/master/runtime/dex_instruction_list.h

Yeah so I understand what now, but is there anything I can still do?

mmhobi7 commented 9 years ago

I found it in your code and you added it support M preview oat, I really am confused. I'm going to try java 6 tomorrow, although I remember oar2dex erroring out about java 8 Maybe it's the api being detected incorrectly?

mmhobi7 commented 9 years ago

Okay so it looks cosmetic, but I was getting an error while booting, I'll test some more.

testwhat commented 9 years ago

Have a try on the latest build. https://github.com/testwhat/SmaliEx/commit/651535be https://github.com/testwhat/SmaliEx/blob/master/smaliex-bin/oat2dex.jar?raw=true

mmhobi7 commented 9 years ago

Well it seems to have fixed outputs during deodexing but I still get this:

01-07 23:42:21.310 1597 1597 F art : art/runtime/runtime.cc:360] (no managed stack frames) 01-07 23:42:21.310 1597 1597 F art : art/runtime/runtime.cc:360] Pending exception java.lang.NoSuchMethodError: no static or non-static method "Landroid/text/StaticLayout;.nLineBreakOpportunities(Ljava/lang/String;[CI[I)[I" 01-07 23:42:21.310 1597 1597 F art : art/runtime/runtime.cc:360](Throwable with empty stack trace)Dumping all threads without appropriate locks held: thread list lock mutator lock

and

01-07 23:42:25.659 1721 1721 E art : Failed to register native method android.text.StaticLayout.nLineBreakOpportunities(Ljava/lang/String;[CI[I)[I in /system/framework/framework.jar:classes2.dex 01-07 23:42:25.659 1721 1721 E art : ----- class 'Landroid/text/StaticLayout;' cl=0x0 -----

mmhobi7 commented 9 years ago

Here is the framework folder, just to make it easier for you. https://drive.google.com/file/d/0B9uqk9InEzCYRGQ5TkdtRmR5TlE/view?usp=sharing

mmhobi7 commented 9 years ago

Tried again with the new Marshmallow preview:

08-17 17:57:07:560 Preparing bootclasspath from /home/aaahh/marshmellow/tmp/framework/arm/odex 08-17 17:57:07:921 De-optimizing /system/framework/core-libart.jar 08-17 17:57:09:479 Analysis info of Landroid/icu/impl/PluralRulesLoader; : : Risky resolved invocation target from debug info. type=Landroid/icu/text/PluralRanges; mIdx=16 objReg=3

testwhat commented 9 years ago
  1. nLineBreakOpportunities should be only existed in Lollipop. It named nComputeLineBreaks in Marshmallow. So the error should not relate to deodex.
  2. "Risky resolved..." is a hint to debug, usually it will not cause problem, and for PluralRulesLoader case, it seems to work well as expected.
testwhat commented 8 years ago

Please try if there is still run-time exception with latest version.