首页 > 其他分享 >修改aosp进行函数调用监控

修改aosp进行函数调用监控

时间:2022-12-16 11:57:28浏览次数:63  
标签:监控 函数调用 aosp 源码 str android

title: 修改aosp进行函数调用监控
date: 2022-12-16 11:12:24
tags:

最近遇到一个问题,如何从系统层面实现动态java函数调用的监控

这个问题源于我之前frida实现监控有很多局限性,因此这次直接修改源码就行监控

aosp源码编译的教程在我另一个博客里有
https://hslxy.top/index.php/2022/08/09/编译android-7-1源码/

这里补充一下重新生成镜像的命令是
make snod

刷驱动
https://developers.google.com/android/drivers#walleyeopm1.171019.013
下载好了在源码根目录运行

刷手机,将编译好的镜像用fastboot刷入
20221216113859
用这个img文件

adb reboot fastboot
fastboot devices //查看是否连接成功

如果连接不上,在这下驱动,并在设备管理器找到其他设备中有个android,将驱动安好

https://github.com/xushuan/google_latest_usb_driver_windows

参考链接 https://blog.csdn.net/qq_33529867/article/details/113665717

我用的aosp版本8.1

实现函数监控

20221216112219

在art/runtime/interpreter/interpreter_common.h
在483行后添加这段

// const char* methodName = shadow_frame.GetMethod()->PrettyMethod().c_str();
std::ostringstream oss;
std::string inst_str = inst->DumpString(shadow_frame.GetMethod()->GetDexFile());
// 监控指令如果是invoke或者return,就将其记录下来
if(strstr(inst_str.c_str(), "invoke") || strstr(inst_str.c_str(), "return")){
    // 记录函数名、invoke指令、return指令
    oss << shadow_frame.GetMethod()->PrettyMethod() << " @@ " <<inst->DumpString(shadow_frame.GetMethod()->GetDexFile());
    LOG(ERROR) << oss.str();
}

修改运行模式
20221216112715
在art/runtime/interpreter/interpreter.cc将237行修改为

static constexpr InterpreterImplKind kInterpreterImplKind = kSwitchImplKind;

监控动态注册

20221216112818

在art/runtime/jni_internal.cc的2264行添加一个输出

LOG(WARNING) << "JNI RegisterNativeMethods: " << c->PrettyDescriptor() << " name:" << name << " sig:" << sig << " fnPtr:" << fnPtr;

修改android:debuggable始终为true

frameworks/base/services/core/java/com/android/server/pm/PackageDexOptimizer.java
20221216113331

将282行注释,改为始终为true

- boolean debuggable = (flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
+ boolean debuggable = true;

标签:监控,函数调用,aosp,源码,str,android
From: https://www.cnblogs.com/hslxy/p/16986946.html

相关文章

  • Zabbix与乐维监控对比分析(四)——告警管理篇
    在前面发布的Zabbix与乐维监控对比分析文章中,我们评析了二者在架构与性能、Agent管理、自动发现、权限管理、对象管理等方面的差异。接下来让我们一起看看二者在告警管理方......
  • Kubernetes监控主要体现在两个方面​
      对于Kubernetes集群,监控的内容包含以下两个方面:​●基础平台服务的监控​实时监控核心组件(APIServer、调度器、控制器、kubelet和kube-proxy等)的健康状态,用以发现用......
  • Kubernetes监控主要体现在两个方面
     对于Kubernetes集群,监控的内容包含以下两个方面:●基础平台服务的监控实时监控核心组件(APIServer、调度器、控制器、kubelet和kube-proxy等)的健康状态,用以发现用户流......
  • Zabbix与乐维监控对比分析(三)——对象管理篇
    在前面的文章中,我们详细介绍了Zabbix与乐维监控在架构、性能、Agent管理、自动发现、权限管理等方面的对比分析,本篇是Zabbix对比乐维监控专题系列文章的第三篇——对象管理......
  • 监控容器节点内存使用率
    #-*-encoding:utf-8-*-fromsubprocessimportPopen,PIPE,STDOUTimporttimedefRun_Cmd(cmd):#执行命令p=Popen(cmd,shell=True,stdin=PIPE,st......
  • 聊聊什么是慢查、如何监控?如何排查?
    Hi,大家好!我是白日梦。今天我要跟你分享的话题是:“聊聊什么是慢查、如何监控?如何排查?”使用推荐阅读,有更好的阅读体验二、什么是慢查?慢查,顾名思义就是很慢的查询。SQL的执行......
  • Zabbix监控系统
    一、Zabbix概述1.1使用zabbix的原因作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。利用一......
  • 监控报警体系:Prometheus和Grafana
    总体prometheus全链路监控报警,在当今云原生时代可观测领域,Prometheus + Grafana 成为可观测性事实标准。采集数据:运维团队可以使用 Prometheus 监控云原生 Kub......
  • 某单位档案室智能化八防十防监控系统
    智慧档案馆建设方案概述就是充分利用各类软硬件技术,对档案馆的运营、实体档案的存储、档案资源的开发与管理等信息进行感知、分析后,应用于决策、管理和服务于新时代的......
  • Hystrix通过Turbine实现集群监控
    上一节我们带领读者使用HystrixDashboard查看服务调用的监控信息,以此来查看某些服务的健康状态。但是我们只查看了goods服务被调用的健康状态,而在一个复杂的分布式系统......