皮皮网

【mt3换皮源码下载】【xLog源码详解】【云呼 源码】artmethod android源码

2024-12-23 02:03:41 来源:翅膀源码

1.android内联优化导致Inlined method resolution crossed dex file boundary
2.一种通用超简单的源码Android Java Native方法Hook,无需依赖Hook框架
3.Frida工作原理学习

artmethod android源码

android内联优化导致Inlined method resolution crossed dex file boundary

       æœ€è¿‘App在android上出现了一个诡异的native 崩溃,很不容易出现,但都是有个特点就是安装App后过一段时间才会出现,杀进程没用,覆盖安装同一个apk,崩溃立刻消失,日志为如下:

        搜索系统art源码中抛出异常的地方:

        发现大致意思就是,我们App中集成了framwwork的android.net.wifi.IWifiScanner这个类,在系统dexopt之后发生了内联优化,导致这个系统的类被内敛到odex中了,然后被系统检测到caller与callee处于不同的dex file,也就是在App的odex中有一份,在系统framework-wifi.jar中也有一份,所以主动发起abort(inline不允许跨dex文件),导致应用出现闪退等异常问题,但是sdk小于P的话,只会报WARNING而不是FATAL。

        于是在安装了App之后手动对apk进行dexopt

        这个崩溃就必现了,这样就比较好分析了,只需要防止这个类被dex优化内敛就行了,加个try-catch就可以。

        参考:

        Android疑难杂症——因内联优化导致9.0机型Native Crash

        Android P新增检测项 应用热修复受重大影响

一种通用超简单的源码Android Java Native方法Hook,无需依赖Hook框架

       前言

       目前,源码Android平台上的源码Hook框架数量众多,但专门针对Java Native方法的源码mt3换皮源码下载Hook却相对较少。这些框架通常将native方法视为普通方法进行Hook,源码xLog源码详解并且可能需要适配复杂的源码架构差异。本文将介绍一种通用的源码Android版本Java Native方法Hook方法,实现代码精简,源码旨在解决这一问题。源码

       native方法注册

       在Android中,源码native方法有两种注册方式。源码本文将通过分析这两种方式,源码云呼 源码提出相应的源码Hook方法。

       RegisterNatives源码分析

       RegisterNatives方法主要进行各种验证并查找对应的源码方法ArtMethod。对于FastNative,该功能在Android 8.0之后通过注解实现,ifconfig函数源码最终通过class_linker->RegisterNative(soa.Self(), m, fnPtr)完成函数注册。接着,我们分析JVMTI的用法,它允许实现许多高级功能,仿miwifi源码包括修改后的new_native_method。通过JVMTI,我们可以实现Hook功能。对于CriticalNative,如果类未初始化,则先初始化类,然后注册方法。最终实现注册的是method->SetEntryPointFromJni(new_native_method)。

       在Android 及以下版本中,直接调用ArtMethod::RegisterNative方法即可覆盖原有功能。对于Android 9以下版本,需要清理FastNative标志。

       分析过程较为复杂,今天仅分享一部分内容,文中语言表述可能不够流畅,对于有兴趣深入了解的朋友,可以与我私下探讨。

       示例代码:

       p

       unit ClientFrm;

       interface

       uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, CoolTrayIcon, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, ExtCtrls, Menus;

       type

       TClientForm = class(TForm)

       PopupMenu1: TPopupMenu;

       N1: TMenuItem;

       procedure N1Click(Sender: TObject);

       private

       { Private declarations }

       public

       { Public declarations }

       end;

       var

       ClientForm: TClientForm;

       implementation

       { $R *.dfm}

       procedure TClientForm.N1Click(Sender: TObject);

       begin

       close

       end;

       end.

       p

       unit BuyFrm;

       interface

       uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

       type

       TBuyForm = class(TForm)

       private

       { Private declarations }

       public

       { Public declarations }

       end;

       var

       BuyForm: TBuyForm;

       implementation

       { $R *.dfm}

       end.

       p

       unit IECache Demo ver 1. ()

*

       // For Delphi 5 -

       // Freeware Demo

       // by

       // Per Linds?Larsen

       // Contributions:

       // Eran Bodankin - bsalsa( bsalsa@bsalsa.com)

       // Updated versions:

       // bsalsa.com

       //