注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

单独编译dexdump  

2014-04-09 19:01:12|  分类: Android开发与逆 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
由于项目需求,需要将dexdump的c代码拿出来单独修改及编译。
1、获取源代码,可以bing搜一下DexDump.c,得到dalvik源代码,我是从下面链接得到的。

2、将 dalvik/libdex里的所有代码和dalvik/dexdump/DexDump.c,以及dalvik/vm/Common.h ,  DalvikVersion.h
提取到某一个目录, 按照原样放好

3、下载safe_iop.c safe_iop.h, 以及 adler32.c 到libdex目录。

4、在ZipArchive.c和SysUtil.c中去掉

//#include <jnihelp.h>        // TEMP_FAILURE_RETRY may or may not be in unistd

添加下面的定义

# ifndef TEMP_FAILURE_RETRY

# define TEMP_FAILURE_RETRY(expression) \
(__extension__ \
({ long int __result; \
do __result = (long int) (expression); \
while (__result == -1L && errno == EINTR); \
__result; }))

# endif /* TEMP_FAILURE_RETRY */

5、vm/Common.h中
把dvmFprintf 改成 fprintf
并把
#if 0
改成
#if 1
这样,就不用 include “utils/Log.h”

6、编译libdex:在libdex下创建comple.sh,保存下面代码到comple.sh,并运行该脚本。

#!/bin/sh
`gcc -c -I.. CmdUtils.c -o ../dexdump/CmdUtils.o`
`gcc -c -I.. DexCatch.c -o ../dexdump/DexCatch.o`
`gcc -c -I.. DexClass.c -o ../dexdump/DexClass.o`
`gcc -c -I. -I.. DexDataMap.c -o ../dexdump/DexDataMap.o`
`gcc -c -I.. DexFile.c -o ../dexdump/DexFile.o`
`gcc -c -I.. DexInlines.c -o ../dexdump/DexInlines.o`
`gcc -c -I.. DexOptData.c -o ../dexdump/DexOptData.o`
`gcc -c -I.. DexProto.c -o ../dexdump/DexProto.o`
`gcc -c -I. -I.. DexSwapVerify.c -o ../dexdump/DexSwapVerify.o`
`gcc -c -I.. InstrUtils.c -o ../dexdump/InstrUtils.o`
`gcc -c -I.. Leb128.c -o ../dexdump/Leb128.o`
`gcc -c -I.. OptInvocation.c -o ../dexdump/OptInvocation.o`
`gcc -c -I.. sha1.c -o ../dexdump/sha1.o`
`gcc -c -I.. SysUtil.c -o ../dexdump/SysUtil.o`
`gcc -c -I.. ZipArchive.c -o ../dexdump/ZipArchive.o`
`gcc -c -I.. adler32.c -o ../dexdump/adler32.o`

7、编译dexdump:在dexdump目录下创建compledexdump.sh,保存下面代码到compledexdump.sh,并运行该脚本

#!/bin/sh
`gcc -c -I.. OpCodeNames.c -o OpCodeNames.o`
`gcc -c -I.. DexDump.c -o DexDump.o`
`gcc -o ../dumpdex DexDump.o CmdUtils.o DexCatch.o DexClass.o DexDataMap.o \
DexFile.o DexInlines.o DexProto.o DexSwapVerify.o InstrUtils.o Leb128.o \
OpCodeNames.o OptInvocation.o sha1.o SysUtil.o ZipArchive.o adler32.o -lz`
rm *.o

在你创建的目录下即可找到dumpdex

8、为了方便我另外再写了一个makedexdump.sh来调用上面两个sh

#!/bin/sh
#compile libdex
cd libdex
`./comple.sh`
cd ../dexdump/
`./compledexdump.sh`
cd ..
echo "Done!!"


$./makedexdump.sh

 「原创」单独编译dexdump - Markro - Markro Blog
运行。和原来的dexdump一样的。
 「原创」单独编译dexdump - Markro - Markro Blog
  评论这张
 
阅读(125)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017