2013-06-03 31 views
1

我正在調試一個ios應用程序,我沒有源代碼,它是一個剝離的二進制文件,所以沒有可以使用的符號。因此,我使用地址在IDA和類轉儲的幫助下設置bps。我遇到過無法真正理解特定方法的返回值或參數的情況。我知道參數應該在$ r2寄存器上,並且方法的返回值是$ r0。使用GDB和無符號調試Ios - 檢查對象

我們來看看返回NSData *指針的subDataWithRange方法。當然,我不能做「po pointer_addr」,因爲我沒有符號,因此gdb失敗。所以,我試圖自己檢查內容。雖然我很確定我應該返回的字節,但我確實檢索了一個指針,但是當我執行諸如「x/20x $ r0」來檢查其內容時,我看不到有意義的字節。

因此,我想問一下NSData *對象和其他像NSString這樣的ios對象的結構,因爲它們會在內存中的原始字節中出現。什麼是結構?在結構中有沒有找到指針,指向返回的字節?

回答

0

你可能會幸運地獲得從Apple's Open Source CFLite releases,其中CFData被定義爲實現一個合理的一瞥:

struct __CFData { 
    CFRuntimeBase _base; 
    CFIndex _length; /* number of bytes */ 
    CFIndex _capacity; /* maximum number of bytes */ 
    CFAllocatorRef _bytesDeallocator; /* used only for immutable; if NULL, no deallocation */ 
    uint8_t *_bytes; /* compaction: direct access to _bytes is only valid when data is not inline */ 
}; 

,這將給你在內存中對象是如何佈局的一些線索然而,大部分框架的源代碼都是私有的,你將不得不採取反覆試驗的方式來獲得對它們如何實現的理解。

爲了增加混亂,許多NS對象是免費電話橋接到其CF當量,和NSData/CFData是這些對象中的一個。我不確定這會有什麼影響。

我不羨慕你的任務。