
garlic decompiler这个项目还有两个月,就写了整整两年了。对于一个曾经是半吊子的 c 选手,稍微有那么一小点(其实挺大的)自豪。
最近两个月写了些东西:
与其说是 elf 的解析,应该说的是基于 armv8 的 elf 的解析。除了 Loads And Stores 部分的 instruction 没有处理,其余的指令都支持了。AI + 手敲,快了很多。效果如下:
[ELF] 0x00000000000118fc <_ZN3mmr5Clock3nowEv> # .text [0 0xd10103ff] SUB x31, x31, #64 [1 0xf90013f3] [2 0xa9037bfd] [3 0x9100c3fd] ADD x29, x31, #48 [4 0xd53bd053] MRS x19, S2_3_13_0_2 [5 0xf9401668] [6 0xf9000fe8] [7 0x910023e1] ADD x1, x31, #8 [8 0x52800020] MOVZ w0, #1, LSL #0 [9 0x97fffaf4] BL #66800 [10 0x34000060] CBZ w0, 71984 [11 0x97fffe7e] BL #70432 [12 0x14000005] B #72000 [13 0xa940a3e9] [14 0x5299400a] MOVZ w10, #51712, LSL #0 [15 0x72a7734a] MOVK w10, #15258, LSL #16 [16 0x9b0a2120] MADD x0, x9, x10, 8 [17 0xf9401668] [18 0xf9400fe9] [19 0xeb09011f] SUBS x31, x8, x9 [20 0x540000a1] B.NE, 0x11960 [21 0xa9437bfd] [22 0xf94013f3] [23 0x910103ff] ADD x31, x31, #64 [24 0xd65f03c0] RET x30 [25 0x97ffff20] BL #71136 [26 0x94000001] BL #72040 [27 0xf81f0ffe] [28 0x97fffdd5] BL #69824 [29 0x97ffff60] BL #71408 跟几个朋友交流,他们说我有毛病,自己动手解析指令,capstone 都写的好好的。但是我觉得我要彻底搞明白,就得一个指令一个指令的过一遍,就像我解析 jvm 和 dalvik 的 bytecode 的过程是一样的,在这个过程中,了解指令集更快,烙印更深。
小插曲:读了armv8 的手册, 脑袋一热,买了美股Arm Holdings的股票,目前亏小 10 个点。
ARM 的文档做的不错,我这种小白花点儿时间也能看懂。对比大 A 的某武纪,某武纪的公开文档真的差。
还是欢迎大家试用,欢迎大家提意见,欢迎 PR ,欢迎提 bug
写在最后:为爱发电,不知道还能走多远。
1 levelworm 101 天前 不错啊,我只能写 lc-3 的 disassembly 。。。 |
2 DiamondY 101 天前 挺好的,star 一下 |
3 OBJECTION 100 天前 The world's fastest apk (android)/java open source decompiler 用 C 语言实现的 Android/Java 反编译器 就 fastest 我也要去 star 一下(虽然我看不懂也用不到) |
4 neocanable OP @OBJECTION 不吹点儿牛逼,没人关注 |
5 neocanable OP @DiamondY 感谢 |