V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
waruqi
V2EX  ›  程序员

新开源的一个轻量的 android dex 文件的 c 解析库,欢迎试用

  •  
  •   waruqi ·
    waruqi · 2020-06-12 12:35:00 +08:00 · 1181 次点击
    这是一个创建于 1625 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目源码:Github

    基本上可以解析 dex 里面大部分指令,不过 odex 的指令还不支持(其实是好久之前撸的了,最近才开源出来,发现 odex 的指令基本都更新过了,之前这部分解析失效了,暂时懒的支持了 = =)

    编译

    项目编译基于xmake,安装后只需要执行 xmake 即可完成编译

    $ xmake
    

    运行测试例子

    $ xmake run dexdump tests/tests.dex
    .file _cast.java
    .class _cast
    .super Object
        .method public void <init>()
            .register 1
            .argument 1
            .catches 0
            .prologue
            0x000b0c: 7010 4e00 0000                         |0000: invoke-direct {v0}, Object.<init>()void
            0x000b12: 0e00                                   |0003: return-void
    
        .method public int main(java.lang.String[])
            .register 7
            .argument 1
            .catches 0
            .prologue
            0x000b24: 6200 0500                              |0000: sget-object v0, System.out:PrintStream
            0x000b28: 1a01 a800                              |0002: const-string v1, "test: ==============================================================="
            0x000b2c: 6e20 4800 1000                         |0004: invoke-virtual {v0, v1}, PrintStream.println(String)void
            0x000b32: 6200 0500                              |0007: sget-object v0, System.out:PrintStream
            0x000b36: 1a01 a900                              |0009: const-string v1, "test: cast: .."
            0x000b3a: 6e20 4800 1000                         |000b: invoke-virtual {v0, v1}, PrintStream.println(String)void
            0x000b40: 6200 0500                              |000e: sget-object v0, System.out:PrintStream
            0x000b44: 1a01 0000                              |0010: const-string v1, ""
            0x000b48: 6e20 4800 1000                         |0012: invoke-virtual {v0, v1}, PrintStream.println(String)void
            0x000b4e: 12f0                                   |0015: const/4 v0, #-1 // #ff
            0x000b50: 8102                                   |0016: int-to-long v2, v0
            0x000b52: 6201 0500                              |0017: sget-object v1, System.out:PrintStream
            0x000b56: 2204 2400                              |0019: new-instance v4, StringBuilder
            0x000b5a: 7010 5100 0400                         |001b: invoke-direct {v4}, StringBuilder.<init>()void
            0x000b60: 1a05 9d00                              |001e: const-string v5, "num = "
            0x000b64: 6e20 5600 5400                         |0020: invoke-virtual {v4, v5}, StringBuilder.append(String)StringBuilder
            0x000b6a: 0c04                                   |0023: move-result-object v4
            0x000b6c: 6e30 5500 2403                         |0024: invoke-virtual {v4, v2, v3}, StringBuilder.append(long)StringBuilder
            0x000b72: 0c02                                   |0027: move-result-object v2
            0x000b74: 6e10 5700 0200                         |0028: invoke-virtual {v2}, StringBuilder.toString()String
            0x000b7a: 0c02                                   |002b: move-result-object v2
            0x000b7c: 6e20 4800 2100                         |002c: invoke-virtual {v1, v2}, PrintStream.println(String)void
            0x000b82: 8f01                                   |002f: int-to-short v1, v0
            0x000b84: 6202 0500                              |0030: sget-object v2, System.out:PrintStream
            0x000b88: 2203 2400                              |0032: new-instance v3, StringBuilder
            0x000b8c: 7010 5100 0300                         |0034: invoke-direct {v3}, StringBuilder.<init>()void
            0x000b92: 1a04 9d00                              |0037: const-string v4, "num = "
            0x000b96: 6e20 5600 4300                         |0039: invoke-virtual {v3, v4}, StringBuilder.append(String)StringBuilder
            0x000b9c: 0c03                                   |003c: move-result-object v3
            0x000b9e: 6e20 5400 1300                         |003d: invoke-virtual {v3, v1}, StringBuilder.append(int)StringBuilder
            0x000ba4: 0c01                                   |0040: move-result-object v1
            0x000ba6: 6e10 5700 0100                         |0041: invoke-virtual {v1}, StringBuilder.toString()String
            0x000bac: 0c01                                   |0044: move-result-object v1
            0x000bae: 6e20 4800 1200                         |0045: invoke-virtual {v2, v1}, PrintStream.println(String)void
            0x000bb4: 8e01                                   |0048: int-to-char v1, v0
            0x000bb6: 6202 0500                              |0049: sget-object v2, System.out:PrintStream
            0x000bba: 2203 2400                              |004b: new-instance v3, StringBuilder
            0x000bbe: 7010 5100 0300                         |004d: invoke-direct {v3}, StringBuilder.<init>()void
            0x000bc4: 1a04 9d00                              |0050: const-string v4, "num = "
            0x000bc8: 6e20 5600 4300                         |0052: invoke-virtual {v3, v4}, StringBuilder.append(String)StringBuilder
            0x000bce: 0c03                                   |0055: move-result-object v3
            0x000bd0: 6e20 5400 1300                         |0056: invoke-virtual {v3, v1}, StringBuilder.append(int)StringBuilder
            0x000bd6: 0c01                                   |0059: move-result-object v1
            0x000bd8: 6e10 5700 0100                         |005a: invoke-virtual {v1}, StringBuilder.toString()String
            0x000bde: 0c01                                   |005d: move-result-object v1
            0x000be0: 6e20 4800 1200                         |005e: invoke-virtual {v2, v1}, PrintStream.println(String)void
            0x000be6: 8d00                                   |0061: int-to-byte v0, v0
            0x000be8: 6201 0500                              |0062: sget-object v1, System.out:PrintStream
            0x000bec: 2202 2400                              |0064: new-instance v2, StringBuilder
            0x000bf0: 7010 5100 0200                         |0066: invoke-direct {v2}, StringBuilder.<init>()void
            0x000bf6: 1a03 9d00                              |0069: const-string v3, "num = "
            0x000bfa: 6e20 5600 3200                         |006b: invoke-virtual {v2, v3}, StringBuilder.append(String)StringBuilder
            0x000c00: 0c02                                   |006e: move-result-object v2
            0x000c02: 6e20 5400 0200                         |006f: invoke-virtual {v2, v0}, StringBuilder.append(int)StringBuilder
            0x000c08: 0c00                                   |0072: move-result-object v0
    
    2 条回复    2020-06-12 12:44:59 +08:00
    sudoy
        1
    sudoy  
       2020-06-12 12:43:07 +08:00
    点赞👍
    zhuangzhuang1988
        2
    zhuangzhuang1988  
       2020-06-12 12:44:59 +08:00
    🐂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   987 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 23:01 · PVG 07:01 · LAX 15:01 · JFK 18:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.