当前位置:编程学习 > wap >>

如何解析dex文件

因为需要,要在android中解析dex文件,通过解析dex文件加载文件中的class。但是解析dex不能用android提供的dexclassloader()去获取class。而是通过native方法自己去解析dex文件,然后用native方法生成一个class……
不知道大家明白我的意思了没?
求帮助啊……
--------------------编程问答-------------------- 没这么用过呀 --------------------编程问答-------------------- 谁有好一点的思路或者解决方案么?
--------------------编程问答-------------------- dexClassloader --------------------编程问答-------------------- 你可以研究下的dex2jar这个开源项目。。。 --------------------编程问答--------------------
引用 4 楼  的回复:
你可以研究下的dex2jar这个开源项目。。。

我去看了下,它貌似是用JAVA实现的,我想用C或者C++去实现。其实我这个实现主要是在native层去做…… --------------------编程问答-------------------- #!/usr/bin/python



def  getStringFromDexFile(dexFileName):
import os
import struct

dexFile = open(dexFileName,'rb')
dexFile.seek(0x38)

dexFileStrTotal=struct.unpack("i",dexFile.read(4))[0]
dexFileStrBeganPoint=struct.unpack("i",dexFile.read(4))[0]


dexFile.seek(dexFileStrBeganPoint)


dexFileStrAddressList=[]
tmepAddressCount=0
while(tmepAddressCount<dexFileStrTotal):
dexFileStrAddressList.append(struct.unpack("i",dexFile.read(4))[0])            
tmepAddressCount+=1


dexFileStrList=[]
for seekCount in dexFileStrAddressList:
listByte=[]
dexFile.seek(seekCount)


if dexFile.read(1)=="\x00":
dexFileStrList.append("")
continue

dexFile.seek(-1,1)

while True:
byteTemp=dexFile.read(1)
if byteTemp>="\x80":
pass
if byteTemp<"\x80":
break

byteCount=0
while (dexFile.read(1)!=("\x00")) :
byteCount+=1

dexFile.seek(-(byteCount+1),1)
tempStr=dexFile.read(byteCount)
dexFileStrList.append(tempStr)


dexFile.close()
return dexFileStrList


刚刚写完的python 源代码,  功能是读取dexFile 里面的所有字符串。 希望对你有帮助









--------------------编程问答-------------------- 呃~怎么没缩进了 ~——~ 
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,