3

是否有任何可用于 smali 代码的语法规范?我正在尝试使用 smali 代码,而我缺少的一件事是 smali 中的某些方法具有 .prologue 部分而有些则没有。不幸的是,wiki似乎没有关于 smali 语法的信息。以前有没有人发现自己处于这种情况?任何建议/解决方案将不胜感激。

EDIT1:我的目标是将日志消息添加到应用程序所有活动的 onResume 方法的开头。

EDIT2:我正在使用 ANTLRv4.1 解析器来解析我的 smali 文件,我从 smaliLexer 获得了一个 CommonTree(解析树)和一个 TokenStream。现在是为日志指令创建令牌并更改解析树,然后生成 classes.dex 文件是正确的方法吗?到目前为止,我还没有找到更改 TokenStream 的方法,并且无法从更改后的 ParseTree 生成 dex 文件。

4

2 回答 2

3

smali 语言中的几乎所有内容都具有 dalvik 字节码/dex 格式的直接类似物。在这种情况下,.prologue 指令对应于作为 debug_info_item 一部分的 DBG_SET_PROLOGUE_END 调试操作码。

来自http://s.android.com/tech/dalvik/dex-format.html

设置 prologue_end 状态机寄存器,指示添加的下一个位置条目应被视为方法序言的结尾(方法断点的适当位置)。prologue_end 寄存器由任何特殊 (>= 0x0a) 操作码清除。

于 2013-08-02T18:00:02.157 回答
1

您可以查看 smali lexer 描述本身,它是由jflex 语法构建的。将序言代码跳过到令牌规范开始的第 #177 行。

于 2013-08-02T13:43:57.297 回答