2013-01-04 55 views
3

我正在調試越獄的iPod Touch 4,iOS(5.1.1)使用的應用程序。唯一的問題是GDB似乎沒有任何應用程序類/選擇器名稱的知識。在越獄的iPod touch上使用gdb調試iOS應用程序| Objective-C符號

附加並設置地址斷點工作,但在嘗試使用objective-c名稱時無法識別符號。例如,break -[Class Selector:]將會失敗。 (我知道+-代表不同的班級類型。)

此外,我沒有此應用程序的源代碼,將無法獲取它。

我正在尋求在沒有xcode或源代碼的設備上純粹使用GDB。

以前有沒有人成功做過這件事?預先感謝任何答案。

回答

3

假設您試圖從商店/發佈版本構建應用程序進行調試,那麼您的二進制文件將會有編譯器從其中刪除符號。只有調試版才能保留這些符號:發佈版本沒有理由保留它們。

要找出名稱,您需要手動反彙編二進制文件,並從中找出需要的東西。這是一個冗長的話題,在這裏很長的時間真的非常詳細(奧賴利的黑客&保護iOS應用程序書有一個很好的一步一步的教程)。請記住,Objective-C消息框架由C組成:如果你不熟悉諸如objc_msgSend系列函數之類的東西,你可能會發現更好地瞭解它們會幫助你。由於Objective-C中的每個方法調用都是使用objc_msgSend發送的,因此每次調用時都可以通過突破指向來有效地找出類和方法的名稱(或者說,突破並自動轉儲內容:它將被調用很多次以便執行它手動將花費太長時間)。

但是,這隻會幫助您識別符號名稱:由於符號從二進制文件中剝離,您仍然必須在地址本身上斷點。

+0

感謝您的回覆。我想我的印象是,由於所有東西都是由字符串組成的,我可以在一個Objective-C應用的發佈版上設置命名斷點。 我知道反彙編二進制的類和選擇器名稱。那些可以用來設置斷點嗎? 很明顯,在反彙編二進制文件時,我可以看到各種類和選擇器的名稱。我想我可以使用這些從gdb設置斷點。 – user1950023

相關問題