使用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. Ubuntu下搜狗拼音突然无法输入中文的解决办法

    搜狗输入法前段时间还可以正常使用,突然今天无法输入中文了.这种情况在Ubuntu中非常常见,可能的原因有3个:1.可能依赖有问题.2.配置文件出错了.3运行出错,需要重新启动一下. 因为我的这个是突然 ...

  2. IO流(File类,IO流的分类,字节流和字符流,转换流,缓冲流,对象序列化)

    1.File类 File类可以在程序中 操作文件和目录.File类是通过建立File类对象,在调用File类的对象来进行相关操作的. 示例: public class Demo01 { public  ...

  3. web前端学习就这9个阶段,你属于哪个阶段?

    第一阶段:HTML+CSS: HTML进阶.CSS进阶.div+css布局.HTML+css整站开发. JavaScript基础:Js基础教程.js内置对象常用方法.常见DOM树操作大全.ECMAsc ...

  4. .Net 异步方法, await async 使用

    最近朋友问起await  和 async第一次听说这个await ,就查了一下这个await使用在于 异步方法async 中,中文意思就是等待,经过一系列的百度参考简单的明白了这个东西的意思,  异步 ...

  5. The ResourceConfig instance does not contain any root resource classes

    问题描述 当我们在使用 myeclipse 创建 Web Service Projects 项目后,运行项目然后就会出现这个问题. 解决方案 通过这个错误描述,我们项目没有找到这个资源.报错的原因在于 ...

  6. NodeJs学习笔记(三)

    最近在用sails框架写移动后台,马上就过年了,打算总结一下.   1.资源      node官方网站: www.nodejs.org      sails官方网站:www.sailsjs.org ...

  7. 【java】多线程同步死锁

    package 多线程; class A{ public synchronized void say(B b){ System.out.println("A说:你把你的本给我,我把我的笔给你 ...

  8. iOS 实现后台 播放音乐声音 AVAudioPlayer 以及铃声设置(循环播放震动)

    1.步骤一:在Info.plist中,添加"Required background modes"键,value为:App plays audio 或者: 步骤二: - (BOOL) ...

  9. iOS 面试题、知识点 之一

    最近面试,发现这些题个人遇到的几率大一些,与大家分享一下,分三文给大家: 当然Xcode新版本与之前一版本的区别,以及iOS新特性是必要了解的吧. Xcode8 和iOS 10 在之前文章有发过,感兴 ...

  10. ftp 只需上传禁止下载

    一.首先在ftp / 主目录下给所有用户授予读写权限 二.给子目录授予写入权限,不允许读取