标签归档:虚拟机

一个dexfile解析库

最近同事在研究自定义解释器加壳的的能力,简单的说就是,自己实现解释器来执行加密的字节码,从而让破解的人无法从内存中dump到完整的dex文件或者永远是错误的dex,加大了破解难度。

由于在Github上没找到合适的c/c++实现的 dex解析库,只好徒手从art虚拟机中扒出来。

这个dexfile只是从art 从抽出的代码,可以使用jni调用,没有封装好的jni接口。需要自己参考dumpdex里的代码或者了解dexfile里的实现才能用。

通过这个库可以获得dex file里的method field 以及各个method的opcode和oprand,如果想自己实现dex虚拟机玩玩可以试试

使用的ndk版本的是r21 cmak3.14 查看更多

VM之从字节码看vm的实现差异

1.基于栈实现,以JVM为例

java源文件

执行命令:得到字节码信息

从上面可以看到main方法由8条指令组成,一般称他为opcode,注意这个opcode并不是汇编语言,而是jvm可以识别的语言,可以说汇编之于Native等于opcode之于jvm

执行分析:

iconst_1 :将1放入操作数栈顶部(此时操作数栈深度为1)

istore_1: 从栈顶取出值,赋值给变量1 (此时操作数栈深度为0)

iconst_2 :将2放入操作数栈顶部(此时操作数栈深度为1)

istore_2:从栈顶取出值,赋值给变量2 (此时操作数栈深度为0)

iload_1,iload_2: 从变量1和变量2加载值,放到操作数栈( 此时操作数栈深度为2)

iadd:把栈顶的两个int值取出并且相加,结果放在栈顶 (此时操作数栈深度为1) 查看更多