全部博文(160)
分类: LINUX
2013-08-03 10:50:11
原文地址:Dalvik虚拟机技术 作者:hunterzy416
前言:dalvik 是 Android 的重要组成部分 ,掌握其运行机制对理解整个Android系统有着相当之大的帮助。本文将介绍GDB单步调试和Dexdump工具的使用,期望为探索dalvik打下一定的基础。
为了能够更方便的调试dalvik,我们需要编译一个在X86上运行的dalvik和相关工具。编译步骤如下:
在用gdb启动dalvik时,需要设置一些环境,比较繁琐,这里创建一个脚本来简化这些过程,脚本名为grund.sh,放于Android源码根目录。下面为脚本内容。
#!/bin/sh
base=`pwd`
root=$base/out/debug/host/linux-x86/pr/sim/system
export ANDROID_ROOT=$root
bootpath=$root/framework
export BOOTCLASSPATH=$bootpath/core.jar:$bootpath/ext.jar:$bootpath/framework.jar:$bootpath/android.police.jar
export ANDROID_DATA=/tmp/dalvik_test
mkdir -p $ANDROID_DATA/dalvik-cache
exec gdb $root/bin/dalvikvm
此处只做简单分析,为抛砖引玉用,各位同学可以藉此探究自己感兴趣的内容。在接下来的文章中会详细分析class加载与字节码的执行。
Dexdump 可执行文件放于out目录下, 可使用”find out/ -name dexdump”命令来找到dexdump。
“dexdump –f hello.jar” 命令可打印jar文件的头部信息。
“dexdump –d hello.jar” 可打印所编译的字节码。
头部信息如下:
Opened 'hello.jar', DEX version '035'
DEX file header:
magic : 'dex
035'
checksum : f2f85a9c
signature : 0404...7831
file_size : 740
header_size : 112
link_size : 0
link_off : 0 (0x000000)
string_ids_size : 14
string_ids_off : 112 (0x000070)
type_ids_size : 7
type_ids_off : 168 (0x0000a8)
field_ids_size : 1
field_ids_off : 232 (0x0000e8)
method_ids_size : 4
method_ids_off : 240 (0x0000f0)
class_defs_size : 1
class_defs_off : 272 (0x000110)
data_size : 436
data_off : 304 (0x000130)