【问题标题】:Mismatch between address offset in dalvik byte code and actual instruction tracedalvik 字节码中的地址偏移与实际指令跟踪不匹配
【发布时间】:2013-11-19 03:27:04
【问题描述】:

嗨,我正在运行一个应用程序,其中 Dex 文件指令具有地址或 PC,例如 0x000253DC,但是当我获得实时指令跟踪时,PC 或地址类似于 41ed7748 它们的范围完全不同。

我只是想知道这是正常的还是我弄错了痕迹?

谢谢。

【问题讨论】:

    标签: java android bytecode dalvik


    【解决方案1】:

    Android 上原生崩溃堆栈跟踪中的地址显示为库偏移量,因此高位将被清零。由于库位置可能会随着运行而改变,地址的高位部分不包含在堆栈跟踪中。

    参见例如this question.

    (这些都与 Dalvik 字节码无关,所以我对 DEX 文件引用有点困惑。希望我没有完全偏离基础。)

    【讨论】:

    • 嗨,让我澄清一下,我可以使用 dexdump 从 dex 文件中获取 dalvik 指令,它具有以下格式 00041ead: 12f0,其中前 12 位被清零,如你所说。现在,如果我可以获得运行时指令跟踪,我最终会得到类似 41ed7748: 12f0 的东西。我的问题是将 dex 中的指令映射到我得到的跟踪,如何匹配 pc 偏移量。这样我就可以知道dex文件中的哪些指令被执行了?
    • DEX 文件也是内存映射的,所以我希望地址的低位也可以在那里匹配。 “运行时指令跟踪”从何而来?你能举个例子吗?托管代码的跟踪通常不显示地址。
    • 您好,我使用了 dalvik 代码并在日志中打印了说明。
    • 啊。您需要转储/proc/<pid>/maps 以找出 DEX 文件映射的基地址,然后减去它以获得 DEX 文件的偏移量。类似于您对本地 PC 所做的事情;见stackoverflow.com/questions/20001153/…
    • 这里是新闻应用 npr 的地图转储,dropbox.com/s/a84ocmmwnm6tn0v/mapsnpr.txt 我应该寻找 448fc000-4494f000 r--p 00000000 b3:39 147562 /data/dalvik-cache/data@app@org。 npr.android.news-1.apk@classes.dex 因为有很多东西。 ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    相关资源
    最近更新 更多