是否有适用于smali代码的语法规范?我正在尝试使用smali代码,其中一个缺少我的事情是,smali中的某些方法有.prologue部分而有些则没有。不幸的是,wiki似乎没有关于smali语法的信息。以前有没有人发现自己处于这种状况?任何建议/解决方案将不胜感激。
EDIT1:我的目标是将日志消息添加到应用程序所有活动的onResume方法的开头。
EDIT2:我正在使用ANTLRv4.1解析器来解析我的smali文件,我从smaliLexer获得了一个CommonTree(解析树)和一个TokenStream。现在是为日志指令创建令牌并更改解析树,然后生成classes.dex文件的正确方法?到目前为止,我还没有找到一种方法来改变TokenStream,我无法从改变的ParseTree生成dex文件。
答案 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行。