什么是 Android 的 Smali 代码

2024-03-17

我将学习一些有关 Dalvik VM、dex 和 Smali 的知识。

我已经阅读过有关 smali 的内容,但仍然无法清楚地了解它在编译器链中的位置。以及它的目的是什么。
这里有一些问题:

  1. 据我所知,dalvik 与其他虚拟机一样运行字节码,对于 Android,它是 dex 字节码。
  2. 什么是斯马利? Android 操作系统或 Dalvik Vm 是否可以直接使用它,或者它只是相同的 dex 字节码,但对人类来说更具可读性?
  3. 它是否类似于 Windows 的 dissasembler(如 OllyDbg)程序可执行文件由不同的机器代码(例如 D3 、 5F )组成,并且每个机器代码都有适当的汇编命令,但 Dalvik Vm 也是软件,因此 smali 是字节码的可读表示
  4. 有新的 ART 环境。它仍然使用字节码还是直接执行本机代码?

先感谢您。


当您创建应用程序代码时,apk 文件包含一个 .dex 文件,其中包含二进制 Dalvik 字节码。这是平台实际理解的格式。然而,读取或修改二进制代码并不容易,因此有一些工具可以在人类可读的表示形式之间进行转换。最常见的人类可读格式称为 Smali。这与您提到的反汇编器本质上是相同的。

例如,假设您有执行类似操作的 Java 代码

int x = 42

假设这是第一个变量,那么该方法的 dex 代码很可能包含十六进制序列

13 00 2A 00

如果你在上面运行 baksmali,你会得到一个包含以下行的文本文件

const/16 v0, 42

这显然比二进制代码更具可读性。但该平台对 smali 一无所知,它只是一个可以更轻松地使用字节码的工具。

Dalvik 和 ART 都采用包含 dalvik 字节码的 .dex 文件。它对应用程序开发人员来说是完全透明的,唯一的区别是应用程序安装和运行时幕后发生的情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么是 Android 的 Smali 代码 的相关文章

随机推荐

  • 使用 Android AccountManager 自定义帐户类型

    我有一个帐户类型 mypackage account 和一个内容权限 mypackage 我有一个Service提供了一个实现AbstractAccountAuthenticator the addAccount方法的实现如下 The us
  • iOS6中无法设置UITableViewCell的背景颜色?

    我开始在模拟器下测试我的应用程序 因为我没有任何 iOS 6 设备 并偶然发现了奇怪的问题 我无法设置 UITableViewCell 的 backgroundColor 属性 如果我这样 cell contentView backgrou
  • Windows 窗体线程和事件 - 列表框更新迅速,但进度条经历巨大延迟

    我们的团队正在创建一个新的招聘工作流程系统来取代旧的系统 我的任务是将旧数据迁移到新模式中 我决定通过创建一个小型 Windows 窗体项目来实现此目的 因为架构完全不同 并且直接的 TSQL 脚本并不是一个足够的解决方案 执行此工作的主要
  • Firebase 身份验证 - 电话 -“INVALID_CERT_HASH”

    当我尝试在本地 Android 设备中运行电话身份验证时 出现以下错误 GetAuthDomainTask Error getting project config Failed with E FirebaseAuth 25345 erro
  • 更改 NetBeans 项目中的 JRE

    我有一个使用 JRE 1 4 环境的 NetBeans 项目 这意味着我无法使用泛型 如何更改项目以使用 1 6 以便我可以使用泛型 In the Project选项卡 右键单击该项目并选择特性 在里面Library类别选择Java 平台
  • 在 C# 中更快地调用 PowerShell cmdlet

    我可以使用 C 中的 Powershell cmdlet 从 O365 获取用户详细信息 问题是获取时间 那太慢了 每个用户需要 2 秒 所以如果我有大量用户 就会导致时间问题 在这里我只想打印所有用户的信息 如名称 组详细信息 许可证 我
  • 在类内部使用具有非静态大小的数组

    我想使用一个可以在 4d 数组内为我存储值的类 Matrix 我想用SetSize为了设置的大小Matrix从我的main功能 class Value public int a int b int c int d sets the valu
  • Android 上的 Socket IO 连接失败

    我正在尝试使用 Socket IO Android 和 Node 创建一个简单的聊天 当我运行应用程序并尝试连接到服务器时 它总是因超时错误而失败 我不明白为什么 这是节点代码 app require express http requir
  • 使用 Watin 登录网页

    我尝试在网页上登录 网页上有两个带有输入的表单 输入具有相同的 Id 用户名 我怎样才能获得正确的输入来设置我的文本 这是我的错误代码 browser TextField Find ByName 用户名 TypeText test123 o
  • 如何从 8 位字节转换为 7 位字节(Base 256 到 Base 128)

    如何从 8 位字节转换为 7 位字节 Base 256 到 Base 128 我想做这样的事情 public string BytesToString byte in public byte StringToBytes string in
  • Angular Ag-Grid 无法正确显示

    我正在尝试使用角度Ag Grid https www ag grid com 在我的网络应用程序中 我已经遵循了这些教程 角网格 开始使用 ag Grid https www ag grid com angular getting star
  • Powershell 默认下拉值

    我有一个脚本 用户可以从下拉列表中选择选项 但如果用户没有选择任何内容 我就会收到错误 即使用户未输入值 如何设置返回的默认值 这是脚本 Edit This item to change the DropDown Values array
  • xquery 中的 SUM 和 GROUP BY 以及 1 个 xml 文件

    我有一个 SQL 查询 SELECT ShipVia SUM Freight FROM Orders GROUP BY ShipVia 它从访问数据库返回以下值 Ship Via TotalFreight 1 16 185 33 2 28
  • android - 如何创建可重用的函数?

    在我的 Android 项目中 我有很多活动 其中一些活动已经扩展了其他内容 例如地图活动或 BroadcastReceiver 如何创建一个可以从任何活动调用的函数 因为我不想在多个活动中重复任何代码 thanks 如果我有一些有用的函数
  • Scala 集合已排序、sortWith 和 sortBy 性能

    Scala在标准库中包含了几种用于对列表进行排序的方法 例如对列表进行排序list 可以使用 list sorted list sortWith lt list sortBy x gt x 虽然这些可能是对列表进行排序的最简单方法 但我发现
  • 用于分组 UITableView 的半透明 UITableViewCell?

    我想创建一个半透明分组表视图单元格 换句话说 我想看到分组的表格视图背景图案 但我不想要完全清晰的单元格 我见过很多关于透明单元的问题 但没有一个解决制作半透明 仅部分透明 单元的问题 这就是我正在尝试的 void tableView UI
  • 如何检测内存不足的段错误?

    如何检测段错误是否是由内存不足情况引起的 我有一个段错误 无法通过 valgrind 和 duma efence 进行诊断 因为它似乎使这些工具本身崩溃 Valgrind 不可能的事情发生了 duma mprotect 失败 无法分配内存
  • .sql 文件的存储过程

    SQL 2005 中是否有一个简单的过程可以将我的所有存储过程吐出到单独的 sql 文件中 我想将它们转移到 VSS 中 但我对单击每个文件获取源代码 将其转储到文本文件等的前景感到不太兴奋 在 SQL Management Studio
  • DocuSign 嵌入签名 returnUrl 长度限制?

    在处理 DocuSign 嵌入式签名流程 过去曾有效 时 我注意到在签署文档后 我被发送回的 returnUrl 中缺少 event 参数 returnUrl 看起来像 http www example com index php para
  • 什么是 Android 的 Smali 代码

    我将学习一些有关 Dalvik VM dex 和 Smali 的知识 我已经阅读过有关 smali 的内容 但仍然无法清楚地了解它在编译器链中的位置 以及它的目的是什么 这里有一些问题 据我所知 dalvik 与其他虚拟机一样运行字节码 对