“smali”语法规范| smali log injection

时间:2013-08-02 12:40:55

标签: android grammar antlr4 smali

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

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

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

2 个答案:

答案 0 :(得分: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)操作码清除。

答案 1 :(得分:1)

您可以查看smali lexer描述本身,它是从jflex grammar构建的。将前导码代码跳到令牌规范开始的第177行。