乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Android下binary級的一些分析調試方法

       老匹夫 2014-03-29
      分類: Android 2014-01-10 14:07 405人閱讀 評論(0) 收藏 舉報

      原文地址:http://blog.csdn.net/jinzhuojun/article/details/18080871

       

      有源碼的情況當然好辦,但沒有源碼想調bug或者想逆向怎么辦。本文列舉了Android下binary級的一些分析調試工具和方法。

       

      Logcat:

      很多時候logcat中找不到直接答案,但其中往往能得到繼續(xù)分析的方向。logcat默認啥都輸出在一起,合理用loglevel和filter來使輸出更加易讀。

      參考:

      http://developer./tools/help/logcat.html
      http://developer./tools/debugging/debugging-log.html

       

      Java層靜態(tài)分析

      有兩種方法:一種是用unzip解壓apk包后用dex2jar(http://code.google.com/p/dex2jar/)和jd-gui(http://jd./)逆向成類似Java源碼的形式,但畢竟是逆向出來的,經不起細看。有些部分還會出現(xiàn)錯誤逆向不出來??傮w來說適合略讀縮小范圍。另一種是用Android apktool(http://code.google.com/p/android-apktool/)。這樣解壓出來的資源和配置文件更可讀。如AndroidManifest.xml是可讀的,而不像前一種方法解出來是亂碼。同時java的代碼是smali code形式。smali code比逆向出來的東西更準確,適合精讀。

      apktool的好處是解壓完了還可以壓回成apk。有時候應用里其實是有個全局變量(比如叫enable_debug的布爾變量)控制著調試輸出的。只要先解壓,在smali code中把它設為true,再重新打包回去就能在logcat里看到輸出了。注意改了之后打包回去后需要簽名http://blog.csdn.net/jinzhuojun/article/details/7654835,否則安裝會出錯。

      參考:Android中apk包的反匯編( http://blog.csdn.net/ariesjzj/article/details/7311340)

       

      Java層動態(tài)分析:

      jdb可以設斷點,改變量,查看類信息等等。

      參考: Android下的JDB調試 (http://blog.csdn.net/jinzhuojun/article/details/7399249

       

      Native層靜態(tài)分析

      自然是Binutils套件了,如objdump,readelf等都是利器。For arm版的在Android源碼的prebuilts目錄中,嫌大也可以單獨下。

       

      Native層動態(tài)分析

      gdb:不解釋,碼農界永遠的神器。參考: Android下用gdb進行系統(tǒng)級源碼調試(http://blog.csdn.net/jinzhuojun/article/details/7375048

      像Mono這樣的JIT引擎會動態(tài)生成代碼,而這些動態(tài)生成的代碼用靜態(tài)分析手段是看不到的。但可以用gdb來看,用disassemble或x/ni命令等。

      有時候程序一起來就隔兒掉,這時可以用雙調試器調試法。先用jdb停?。ㄅ浜蟂ettings->Developer Options里的Wait for debugger選項),用gdb連上設好斷點,再在jdb里繼續(xù)。參考: Android下雙調試器(gdb+jdb)調試應用程序(http://blog.csdn.net/ariesjzj/article/details/7402832

       

      另外一些動態(tài)分析工具 

      Android作為一個Linux為內核的系統(tǒng),自然在Linux下的那些動態(tài)分析工具大多都能用。如strace可以監(jiān)視系統(tǒng)調用(如open, mmap等)和信號。tcpdump可以截獲網(wǎng)絡傳輸數(shù)據(jù)等。

      /proc/pid/目錄下提供了該進程豐富的OS級運行時信息,如maps文件顯示進程的虛擬地址空間映射信息,status有內存使用等信息,cmdline和exe可以看到該進程對應的執(zhí)行文件。net, fd, task目錄分別可以看網(wǎng)絡,文件,線程信息等。

      /data/tombstones/:程序由于錯誤退出后的“墓碑”,里面記錄著程序的“死相”。



      Android自帶的分析調試工具

      Settings->Developer Options:里面有一坨調試分析工具。像顯示觸摸點坐標和顯示應用Layout等功能,都是很實用的。

      SDK中的tools/monitor,以前叫DDMS,里面可以看內存,線程,網(wǎng)絡等信息,還包括了截圖等實用功能。參考:

      http://developer./tools/debugging/ddms.html 

      http://developer./tools/debugging/debugging-memory.html

      dumpsys 命令不僅可以輸出很多系統(tǒng)信息(如硬件參數(shù)等),后面加service名(如SurfaceFlinger)還可以看service的運行時狀態(tài)。

      Dev Tools App包含了一些調試分析功能,其實很多都被移到Developer Options里了。參考: http://developer./tools/debugging/debugging-devtools.html

      Android Emulator:優(yōu)點是從模擬硬件到API實現(xiàn)都可以改。缺點是arm版本慢且OpenGLES支持稍差,所以不少游戲不能跑。x86版本由于可以虛擬化會快些,另外打開gpu on還可以使用host上的gpu來提高gpu性能。

      SDK中的hierarchyviewer可用于分析UI。參考:http://developer./tools/help/hierarchy-viewer.html

       

      性能分析工具 

      都是profiling工具:

      systrace,參考:http://developer./tools/help/systrace.html

      Traceview,參考:http://developer./tools/debugging/debugging-tracing.html

      Oprofile,參考:http://blog.csdn.net/dongjun7357/article/details/6400549

      另外應用來不及響應會產生ANR,log位于/data/anr/trace.txt。

        

      OpenGL渲染分析

      OpenGL ES tracer:截獲所有OpenGL調用。缺點是慢,優(yōu)點是直觀,每一幀,每一條GL命令都有對應的結果圖像,因此很容易找出是哪條GL命令出了問題。參考:http://developer./tools/help/gltracer.html

      Settings->Developer Options里Enable OpenGL traces,可以在logcat里輸出。優(yōu)點是快,缺點是輸出不直觀。

       

      一些輔助調試的Android App

      Busybox:默認的adb shell功能弱爆了,這個可以讓開發(fā)者找回一點用Linux的感覺。

      Terminal:不用host直接在guest設備就可以用的Android shell。

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多