动态调试SO之在.init_array段下断点
图/文 0n1y3nd前言
由前面的分析可以知道,so被加载之后最开始执行的是init_array段的代码。然后才会去执行jni_onload那么,在.init_array处断下来便是很有必要的
前期准备
android系统中位于/system/bin/的linkerida 6.4
android_server
mytestcm.apk
准备工作做好之后,下面正式开始调试
0×1
push android_server到tmp目录下,给权限,然后以root身份执行。adb forward端口转发
IDA attach对应进程
0×2
新开一个IDA,载入linkerShift+F12打开字符串窗口,搜索字符串:dlopen
动态调试的IDA中,G跳转到:400D3000+F30=400D3F30处,下好断点
来到动态调试的ida,G跳转到:400D3000+2720=400D5720处,下断点
0×3
按F9运行然后打开Eclipse或者ddms
执行 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
程序就会断在第一个断点处,F9几次就段在blx R4处
F7跟进就来到init段代码处: