2011-08-31 168 views
3

我需要配置Android應用程序的動態庫調用,並決定使用「ltrace」工具進行配置文件的配置文件。我將「ltrace」工具組合成android包,然後成功編譯在一起。它和通常的Linux控制檯應用程序一樣可以很好地運行在shell程序中使用ltrace分析Android應用程序

但是,我無法正確地分析從「Zygote」進程派生出來的android應用程序。我嘗試將ltrace附加到「Zygote」進程以跟蹤它的子進程,但我只獲得了SIGCHLD和SIGSTOP信號並異常終止,顯示以下錯誤。在0xffff0508

意外指令爲0xffffffff我只是想知道是否有人曾經嘗試過這種分析的Android系統。任何簡短的評論對我都很有幫助。

預先感謝您。

回答

2

嘗試將ltrace附加到你的android應用程序的進程後,它被分離出zygote。你將需要一個爲android的仿生libc構建的ltrace,以及一個對線程進行合理處理的ltrace。

有一種方法可以設置一個可調試的android應用程序來等待java調試器的連接,您可以使用它,連接ltrace,然後連接並斷開java調試器以重新啓動它。這應該捕捉你自己的大部分邏輯,儘管不是整個啓動。

IIRC你有時間限制連接並重新開始,否則它可能會自行恢復,以避免觸發應用程序沒有響應的情況。

這可能是因爲您將通過使用java調試器來了解發生了什麼,然後閱讀源代碼以查看在本機端如何實現它,您將學到更多。

+0

感謝您的回答,但我想從新進程開始時進行配置文件,而不是在執行過程中。這就是爲什麼我試圖從新流程從「合子」分化出來的時候進行剖析。而且似乎java調試器不是爲我的目的,因爲我有興趣分析外部原生動態庫而不是java程序本身。感謝您的評論。 –

+0

java調試器的目的只是爲了在啓動時儘早停止該程序,以便您可以附加ltrace。 –

+0

你是對的。我可以使用java調試器在入口點設置斷點。但我關心的是這種方法似乎只適用於具有源代碼的應用程序。你認爲有可能在我們沒有源代碼的應用程序的入口處設置中斷嗎?再次感謝您提供非常有用的答案。 –

0

克里斯斯特拉頓先生的方式將工作。

LoadLibrary()是打破jni的另一個突破點。