Trace32使用教程-访问类型(Access Class)

26 篇文章 2 订阅
7 篇文章 3 订阅

Trace32使用教程-访问类型(Access Class)

访问类型(Access Class)被 Trace32的PowerView用于指定访问内存、外设的寄存器、可寻址的core资源、协处理寄存器以及Trace32的虚拟内存等。

在Trace32中,寻址包括两部分:访问类型+地址,比如:

Data.Dump A:0x123456

其中 A为访问类型,0x123456为访问的地址,二者之间用冒号 连接。

访问类型可以是:

  • 程序内存类型(program memory class)
  • 数据内存类型( data memory class)

程序内存类型Program Memory Classes

通常使用字母 P(Program)来表示程序内存类型(可省略),比如以下命令:

List P:0x4568

List 0x4568

P可以省略,上述两个命令都是在程序地址为 0x4568的地方,打开源代码窗口。

除了 P类型之外,还有 R, TV等程序内存类型,这些类型是处理器架构用来指定不同指令集的编码格式:

R针对ARM架构,表示ARM指令集编码
T针对ARM架构,表示THUMB指令集编码
V针对POWER架构,表示VLE指令集编码

可用的程序内存类型取决于当前所使用的处理器架构,详细内容可以参考Processor Architecture Manual

数据内存类型Data Memory Classes

通常使用字母 D(Data)来表示程序内存类型(可省略),比如以下命令:

Data.dump D:0x6770

Data.dump 0x6770

D可以省略,所以上述两个命令都是同一个操作。

此外,对于一些特殊场景,还可以使用其他的字母来表示内存类型,比如 X表示针对MMDSP架构,使用 X总线来访问数据内存。

在Trace32中总是以如下的窗口显示Data.dump的信息:

在这里插入图片描述

比如其中修饰内存地址的 SD就代表“Supervisor Data ”。

如果访问类型被忽略,Trace32将会使用默认的访问类型。比如直接对内存地址 0x40080000进行 Data.dump,则可以发现默认使用了 ZSD的访问类型进行修饰,关于 ZSD代表何种类型,将在下文中解释。

处理器访问类型Access Classes for Core Resources

以下是一些处理器资源常用的缓存访问类型:

ICInstruction Cache指令缓存
DCData Cache数据缓存
L2Level 2 Cache 二级缓存
NCNo Cache (access with caching inhibited)限制缓存的访问

比如下面这些指令

Data.dump DC:0x6770 ; 显示地址0x6770处的16进制数据转存,DC表面数据从Data cache上获得的
Data.dump NC:0x6770 ;NC表示不经过缓存,数据是从物理内存physical memory上读取的

访问类型属性Access Class Attributes

E运行时访问,优先采用非侵入性访问,如果不支持,就是侵入性访问。
A物理地址的访问,绕过MMU(MMU可以将虚拟地址和物理地址进行转换)
SSupervisor 内存,特权访问
U用户内存,非特权访问
Z安全访问(比如ARM的TrustZone)
N非安全访问

比如以下命令:

Data.dump A:0x29876

解释:dump物理地址为0x29876上的数据

Data.dump AD:0x29876

解释:D表示Data,代表数据内存,所以同上命令

Data.dump ADC:0x29876

解释:A同上,DC表示Data Cache,表示dump物理地址为0x29876上的数据,数据的来源为Data Cache

访问类型扩展

如果用户忽略指定访问类型,Trace32将根据经验进行填充,填充的规则基于:

  • 当前CPU的上下文context(架构特有的)
  • 使用的窗口类型(比如Data.dump是显示数据内存,List.Mix窗口是显示代码内存)
  • 所加载应用的符号信息(比如代码和数据的结合)
  • 使用不同的指令集的段segments
  • 特殊的调试设置(比如SYStem.Option.*)

比如通过CPU访问,假设CPU处于非安全的supervisor模式,执行32bits代码。Trace32会根据当前处理器上下文自动将A扩展成 ANSD或者 AZSD,将Z扩展成ZSD。比如当前处理器处于secure模式下:

以下是Trace32自动进行的访问模式扩展:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个使用Frida-trace跟踪Android应用程序类的简单例子: 1. 首先,确保您已经安装了Frida和Frida-trace。您可以从Frida官方网站或者GitHub仓库下载并安装Frida。安装完成后,您可以使用以下命令来安装Frida-trace: ``` npm install -g frida-trace ``` 2. 然后,选择一个要跟踪的Android应用程序。假设您选择的应用程序包名为com.example.app。 3. 接下来,使用以下命令启动Frida-trace: ``` frida-trace -U -f com.example.app -m "classes" ``` 这个命令将会启动Frida-trace,监听所有类的加载。请注意,-U选项表示在USB上连接的设备上运行Frida-trace,-f选项指定要跟踪的应用程序,-m选项指定要跟踪的模式,这里我们使用“classes”。 4. 最后,您可以打开您选择的应用程序并执行一些操作,例如打开一个新的活动。当应用程序加载一个新的类时,Frida-trace将会显示相关信息,例如类名、类加载器、父类等。 ``` Loaded: java.lang.String @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Object @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Class @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Package @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Runtime @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.System @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Thread @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.ThreadGroup @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.Throwable @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.annotation.Annotation @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.ref.Reference @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.ref.SoftReference @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.ref.WeakReference @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.Locale @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.ResourceBundle @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.concurrent.atomic.AtomicBoolean @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.concurrent.atomic.AtomicInteger @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.concurrent.atomic.AtomicLong @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.regex.Pattern @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.AccessibleObject @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Array @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Constructor @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Field @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Method @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Modifier @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.lang.reflect.Proxy @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.ArrayList @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 Loaded: java.util.Collections @ 0x7b7d5848 - cl=java.lang.BootClassLoader @ 0x7b7d5860 ``` 上述例子演示了如何使用Frida-trace在Android应用程序中跟踪所有类的加载。您可以使用类似的方法来跟踪其他模式,或者使用Frida提供的API来自定义和扩展Frida-trace的功能。如果您需要更多关于Frida-trace的信息,请参考Frida官方文档或者在GitHub上查看Frida-trace的源代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SOC罗三炮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值