使用GPA针对android应用的绘制分析

以前经常用GPA来perf端游的绘制,很多perf工具例如perfhud,pix对于加壳的程序总是束手无策,但是GPA却不受这个限制,可以自动HOOK 3D程序的子进程。

对于Perf手游的分析软件也有很多,例如AdrenoProfiler、SnapdragonProfiler、UnityProfile、Mali_Graphics_Debugger等工具,但都有诸多限制:

1、  还得找个对应芯片的真机,最好还ROOT过

2、  USB连接线不稳,总是容易断开,重新连接

于是就想着能否使用GPA等工具来分析android模拟器,经过一番折腾,发现奏效了。

其实方法很简单,记得把Android模拟器改为DirectX的渲染模式,然后找到模拟器的EXE,当成一般的3D程序HOOK工具就可以了。

然后就可以看看一些游戏是咋渲染的了:

可以看到角色渲染方面使用的Sampler和Shader,不过很遗憾,代码是Assembly的,需要自行的转成HLSL。

// cbuffer $Globals

// {

//

//   float __BloomFactor;               // Offset:    0 Size:     4

//   float4 __Color;                    // Offset:   16 Size:    16

//   float4x4 __DITHERMATRIX;           // Offset:   32 Size:    64

//   float __Emission;                  // Offset:   96 Size:     4

//   float __EmissionBloomFactor;       // Offset:  112 Size:     4

//   float4 __EmissionColor;            // Offset:  128 Size:    16

//   float3 __FirstShadowMultColor;     // Offset:  144 Size:    12

//   float __LightArea;                 // Offset:  160 Size:     4

//   float3 __LightSpecColor;           // Offset:  176 Size:    12

//   float4 __ScreenParams;             // Offset:  192 Size:    16

//   float __SecondShadow;              // Offset:  208 Size:     4

//   float3 __SecondShadowMultColor;    // Offset:  224 Size:    12

//   float __Shininess;                 // Offset:  240 Size:     4

//   float __SpecMulti;                 // Offset:  256 Size:     4

//   float __UsingBloomMask;            // Offset:  272 Size:     4

//   float __UsingDitherAlpha;          // Offset:  288 Size:     4

//   float3 __WorldSpaceCameraPos;      // Offset:  304 Size:    12

//   float4 __WorldSpaceLightPos0;      // Offset:  320 Size:    16

//

// }

//

//

// Resource Bindings:

//

// Name                                 Type  Format         Dim Slot Elements

// ------------------------------ ---------- ------- ----------- ---- --------

// samplers2D[0]                     sampler      NA          NA    0        1

// samplers2D[1]                     sampler      NA          NA    1        1

// samplers2D[2]                     sampler      NA          NA    2        1

// textures2D[0]                     texture  float4          2d    0        1

// textures2D[1]                     texture  float4          2d    1        1

// textures2D[2]                     texture  float4          2d    2        1

// $Globals                          cbuffer      NA          NA    0        1

//

//

//

// Input signature:

//

// Name                 Index   Mask Register SysValue Format   Used

// -------------------- ----- ------ -------- -------- ------ ------

// SV_Position              0   xyzw        0      POS  float

// TEXCOORD                 7   xyzw        1     NONE  float

// TEXCOORD                 0   xyzw        2     NONE  float   x

// TEXCOORD                 1   xyzw        3     NONE  float   xyzw

// TEXCOORD                 2   xyz         4     NONE  float   xyz

// TEXCOORD                 6      w        4     NONE  float      w

// TEXCOORD                 3   xyz         5     NONE  float   xyz

// TEXCOORD                 4   xy          6     NONE  float   xy

// TEXCOORD                 5     zw        6     NONE  float     zw

//

//

// Output signature:

//

// Name                 Index   Mask Register SysValue Format   Used

// -------------------- ----- ------ -------- -------- ------ ------

// SV_TARGET                0   xyzw        0   TARGET  float   xyzw

//

ps_5_0

dcl_globalFlags refactoringAllowed

dcl_constantbuffer cb0[21], immediateIndexed

dcl_sampler s0, mode_default

dcl_sampler s1, mode_default

dcl_sampler s2, mode_default

dcl_resource_texture2d (float,float,float,float) t0

dcl_resource_texture2d (float,float,float,float) t1

dcl_resource_texture2d (float,float,float,float) t2

dcl_input_ps linear v2.x

dcl_input_ps linear v3.xyzw

dcl_input_ps linear v4.xyz

dcl_input_ps linear v4.w

dcl_input_ps linear v5.xyz

dcl_input_ps linear v6.xy

dcl_input_ps linear v6.zw

dcl_output o0.xyzw

dcl_temps 5

使用GPA针对android应用的绘制分析的更多相关文章

  1. Android之View绘制流程源码分析

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 对于稍有自定义View经验的安卓开发者来说,onMeasure,onLayout,onDraw这三个方法都不会陌生,起码多少都有所接触吧. 在安卓中 ...

  2. 1.Android 视图及View绘制分析笔记之setContentView

    自从1983年第一台图形用户界面的个人电脑问世以来,几乎所有的PC操作系统都支持可视化操作,Android也不例外.对于所有Android Developer来说,我们接触最多的控件就是View.通常 ...

  3. Android笔记--View绘制流程源码分析(二)

    Android笔记--View绘制流程源码分析二 通过上一篇View绘制流程源码分析一可以知晓整个绘制流程之前,在activity启动过程中: Window的建立(activit.attach生成), ...

  4. Android笔记--View绘制流程源码分析(一)

    Android笔记--View绘制流程源码分析 View绘制之前框架流程分析 View绘制的分析始终是离不开Activity及其内部的Window的.在Activity的源码启动流程中,一并包含 着A ...

  5. Android Choreographer 源码分析

    Choreographer 的作用主要是配合 Vsync ,给上层 App 的渲染提供一个稳定的 Message 处理的时机,也就是 Vsync 到来的时候 ,系统通过对 Vsync 信号周期的调整, ...

  6. 3.View绘制分析笔记之onLayout

    上一篇文章我们了解了View的onMeasure,那么今天我们继续来学习Android View绘制三部曲的第二步,onLayout,布局. ViewRootImpl#performLayout pr ...

  7. 4.View绘制分析笔记之onDraw

    上一篇文章我们了解了View的onLayout,那么今天我们来学习Android View绘制三部曲的最后一步,onDraw,绘制. ViewRootImpl#performDraw private ...

  8. 2.View绘制分析笔记之onMeasure

    今天主要学习记录一下Android View绘制三部曲的第一步,onMeasure,测量. 起源 在Activity中,所有的View都是DecorView的子View,然后DecorView又是被V ...

  9. 从Android系统出发,分析Android控件构架

    从Android系统出发,分析Android控件构架 Android中所有的控件追溯到根源,就是View 和ViewGroup,相信这个大家都知道,但是大家也许会不太清楚它们之间的具体关系是什么,在A ...

随机推荐

  1. ajax接收json

    l 什么是json? l Json和xml比较 l Ajax如何使用JSON l Ajax接收json响应案例 什么是json? JSON (JavaScript Object Notation) 是 ...

  2. XML文档读取-DOM4j

    JAXP是sun公司官方提供的java解析工具包,但很多其他企业和机构也都开发了自己的xml解析工具,甚至比JAXP更加优秀,比如DOM4J. Dom4j是一个简单.灵活的开放源代码的库.Dom4j是 ...

  3. 获取手机是否root信息

    private String isRoot(){ String bool = "Root:false"; try{ if ((!new File("/system/bin ...

  4. 自学Zabbix3.8.2-可视化Visualisation-maps网络地图

    自学Zabbix3.8.2-可视化Visualisation-maps网络地图 可以简单的理解为动态网络拓扑图,可以针对业务来配置zabbix map,通过map可以了解应用的整体状况:服务器是否异常 ...

  5. String、StringBuilder和StringBuffer类

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  6. Swift 3.0在集合类数据结构上的一些新变化

    一.Array数组的更改 array数组中修改的API示例如下: //创建大量相同元素的数组//创建有10个String类型元素的数组,并且每个元素都为字符串"Hello"//sw ...

  7. spark-submit参数说明--standalone

    示例: spark-submit [--option value] <application jar> [application arguments] 参数名称 含义 --master M ...

  8. 《编程语言实现模式》【PDF】下载

    <编程语言实现模式> 编程语言实现模式旨在传授构建语言应用(工具)的经验和理念,教读者构建自己的语言应用.这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理.分析.翻译输 ...

  9. linux下PHP后台配置极光推送问题

    一.composer.json配置注意空格 按照极光推送官网所述,在composer.json下写入: "require": { "jpush/jpush": ...

  10. Java中 &&与&,||与|的区别

    区别 &&  || 是逻辑运算,支持短路运算 & | 是位运算,不支持短路运算 短路运算 当有多个表达式时,左边的表达式值可以确定结果时,就再继续运算右边的表达式的值; 举例 ...