首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是Smali代码Android

什么是Smali代码Android
EN

Stack Overflow用户
提问于 2015-06-15 04:39:01
回答 2查看 56.7K关注 0票数 53

我将学习一些关于Dalvik,dex和Smali的知识。

我读过有关smali的文章,但仍然不清楚它在编译链中的位置。以及它的目的。

以下是一些问题:

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

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-15 05:17:22

创建应用程序代码时,apk文件包含一个.dex文件,其中包含二进制Dalvik字节码。这是平台真正理解的格式。但是,读取或修改二进制代码并不容易,因此有一些工具可以转换到人类可读的表示形式。最常见的人类可读的格式称为Smali。这基本上和你提到的那个装模作样的人是一样的。

例如,假设您有Java代码,它可以执行以下操作

代码语言:javascript
复制
int x = 42

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

代码语言:javascript
复制
13 00 2A 00

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

代码语言:javascript
复制
const/16 v0, 42

这显然比二进制代码可读性强得多。但是这个平台对smali一无所知,它只是一个让字节码更容易使用的工具。

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

票数 77
EN

Stack Overflow用户

发布于 2021-08-29 17:07:07

高级语言编程包括额外的工具,使编程更容易&为程序员节省时间。在编译程序之后,如果要对其进行反编译,返回到原始源代码需要进行大量的代码分析,以确定程序代码的结构和流程,很可能会有几个以上的传递/解析。然后,反编译程序必须根据编译代码的编译器、版本或编译器以及编译后的操作系统的特性来构造源代码。如果涉及到OS特定的特性、框架、解析器或外部库,例如.net或dome.dll,以及它们的版本等

其次,最好的结果是输出整个程序流,就好像源代码是在一个大文件(即。没有单独的对象、库、依赖项、继承、类或api。在这里,反编译程序会抛出代码,在编译时会导致错误,因为无法访问源代码&其他文件/依赖项的结构。参见示例这里。

第三种&最好的选择是根据程序指令遵循操作系统正在做的事情,这将是机器代码,或者dex (在Android的情况下)。除非你坐在莫斐斯领导的尼布甲尼撒里,没有时间去解码处理器正在运行的体系结构指令集中的每一个操作码,否则当你监视程序流/执行时,你会想要比屏幕上滚动的unicode字符更易读。

这就是组装代码产生不同之处的地方;它几乎是机器代码的直接转换,以人类可读的格式。我说“几乎”是直接的,因为微处理器有像微代码这样的助手,用于流水线和硬件加速器的多线程阅读器,以提供更好的用户体验。

如果您有源代码,您将使用代码所用的语言进行编辑。类似地,如果您的没有源代码,并且正在编辑编译后的应用程序,那么您仍然在用代码所用的语言进行编辑;在本例中,它是机器代码,或者是次好的代码:斯马利

这里有一个图表来说明"Dalvik,dex和Smali“和”它在编译器链中的位置“。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30837450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档