使用IDA Pro动态调试SO文件
(1)在IDA的安裝路徑中找到android_server文件。
(2)將android_server拷貝到手機的/data/local/tmp目錄下面。
(3) 將手機插上電腦,打開命令提示符,?
先輸入”adb shell”,然后輸入”su root”獲取root權(quán)限。
接著輸入” chmod 777 /data/local/tmp/android_server” 給android_server加上相應的權(quán)限。?
接著輸入” /data/local/tmp/android_server”啟動android_server。
(4)重新打開一個命令提示符,
輸入”adb forward tcp:23946 tcp:23946”進行tcp端口轉(zhuǎn)發(fā)
(5)adb root模式下執(zhí)行” am start -D -n com.example.testjniso/com.example.testjniso.MainActivity”命令,啟動所要調(diào)試的Activity。注意這里選擇的Activity名的獲取有個技巧可獲得,先打開DDMS或者Monitor,下面的窗口日志。然后手動打開APP,在前面會提示啟動的Activity名,如下圖:
輸入調(diào)試運行的APP后,?app會彈出”Waitting for debugger”對話框,如下圖所示:
? ? ? ? ? ? ? ?
(6)啟動ida pro,點擊”Debugger - > Attach -> Remote ArmLinux/Android?debugger”,會看到以下對話框:
點擊”Debug options”按鈕,在”Suspend on process entry point”, ”Suspend on thread start/exit”, ”Suspend on library load/unload” 等選項的前面打上勾,如下圖所示:
點擊”ok”后會在以下對話框的hostname中填上”localhost”
在彈出的”Choose process to attach to”窗口中找到”com.example.testjniso”進程,選中該進程,然后點擊”ok”按鈕。
(7)打開eclipse ddms在Devices窗口中可以看到以下內(nèi)容:
其中可以看到com.example.testjniso進程的端口為8700。
(8)打開命令提示符,輸入以下命令:jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost
? ?如下圖所示:
(9)點擊ida中的繼續(xù)執(zhí)行按鈕,下圖中的綠色三角形按鈕(或者按F9)。
在ida彈出的”Add map”窗口中,一律點擊”Cancle”按鈕。
(10)點擊app中的”點擊加載so文件”按鈕,確保so文件已經(jīng)加載到了手機內(nèi)存中。點擊ida中的”Debugger -> Debugger windows -> Module list ”。在”Modules”窗口中找到libTestJni.so
點擊ida中的暫停調(diào)試按鈕,暫停當前的調(diào)試,如下圖所示:
右擊libTestJniSo.so文件,在彈出的框中點擊”Jump to module base”,跳轉(zhuǎn)到libTestJniSo.so文件的起始地址。
按下Alt+T,彈出查找對話框中輸入” Java_com_example_testjniso_MainActivity_helloFromJni”?如下圖所示:
點擊”ok”按鈕后,即可跳轉(zhuǎn)到?Java_com_example_testjniso_MainActivity_helloFromJni?函數(shù)所在的起始地址。
然后在地址處下斷點:
再按F9重新開始調(diào)試,點擊app中的”點擊加載so文件”按鈕重新加載libTestJniSo.so,即可看到程序成功地停在了斷點處:
到此處就可以正常地調(diào)試so文件了。
原文參照:http://blog.csdn.net/pengyan0812/article/details/43990791
總結(jié)
以上是生活随笔為你收集整理的使用IDA Pro动态调试SO文件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python格式化输出方法
- 下一篇: 协议簇:TCP 解析:TCP 数据传输