【问题标题】:Is the .catchall used to indicate finally clause in smali for Dalvik byte code?.catchall 是否用于在 smali 中为 Dalvik 字节码指示 finally 子句?
【发布时间】:2012-12-29 05:56:54
【问题描述】:

我注意到当java代码中有finally子句时,总是会生成.catchall来识别finally块或使用.catchall标签内联它,但我没有找到任何网上的信息是不是这样还是有更多的解释,有人知道吗?

【问题讨论】:

    标签: java android smali


    【解决方案1】:

    是的,finally 块是可能生成 .catchall 的一种情况。但是,它也可以用于其他事情。例如,也可以在同步方法的情况下生成,保证锁被释放。

    catch all 处理程序记录在dex-format 规范中。具体来说,在 code_item 中包含的 encoded_catch_handler 项中。

    同样相关的是classfile specification 中的等效数据。查看异常表中的 catch_type 项。

    【讨论】:

    【解决方案2】:

    我想你可能期望太高了。

    您要问的是(实际上)davlik 代码生成器/翻译器的代码生成模式。根据我的经验,人们不会详细描述编译器/代码生成器在幕后所做的事情:

    • 这些行为不需要指定。实际上,规范可能会因过度约束实施而造成伤害。
    • 此类文档的编写和维护成本很高。
    • 这样的文档很少有读者来证明费用合理。

    我建议您查看 davlik 翻译器的源代码,看看它实际上做了什么。 (尝试搜索“catchall”...)


    请注意,dex 格式规范为您提供了输出“语言”及其含义。这限制了 davlik 翻译器可以做什么,但它不会告诉你翻译器在所有情况下实际上要做什么。

    【讨论】:

    • 也感谢您的意见和建议!!
    猜你喜欢
    • 2018-01-06
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2015-08-08
    • 2013-04-09
    • 1970-01-01
    相关资源
    最近更新 更多