簡體   English   中英

如何判斷專用框架方法的參數必須為哪種類型?

[英]How can I tell of which type the argument for a private framework method has to be?

我目前正在使用私有框架,主要是出於此目的。 從某種意義上說,我為自己設定了一個目標,即讓鈴聲安裝程序(就像Garage Band能夠安裝鈴聲一樣)在非越獄設備上運行。

因此,我一直在瀏覽類轉儲,發現ToneLibrary.framework和TLToneManager請參閱classdump )看起來很有希望。 TLToneManager-(void)importTone:(id)arg1 metadata:(id)arg2 completionBlock:(/*^block*/ id)arg3看起來-(void)importTone:(id)arg1 metadata:(id)arg2 completionBlock:(/*^block*/ id)arg3我的要求。

對於該方法,期望將TLITunesTone對象作為arg1似乎是顯而易見的,因此我創建了一個對象,並使用我的應用程序捆綁包中的m4r文件對其進行了初始化,然后將其傳入。這導致'NSInvalidArgumentException', reason: '-[TLITunesTone writeToFile:atomically:]: unrecognized selector sent to instance 0x15551770' 因此,它期望有其他東西-顯然實現了writeToFile:atomically:東西,也許是NSData或NSDictionary。

在我繼續盲目試驗之前,我想知道-是否有一種方法(試錯法除外)可以找出需要通過私有方法傳遞哪種類型的參數? (我確實意識到,即使我知道類型,例如對於字典,我仍然可能缺少所需內容的知識)

謝謝!!

  1. 查找使用您感興趣的API的應用程序/守護程序,並使用CydiaSubstrate或theos / logos掛接方法/函數調用。 這樣,您就可以使用NSLog參數類型。
  2. 拆卸。 您不會找到確切的參數類型,但可能會有一些線索,例如在參數上調用了哪些方法(如您的情況,如writeToFile:atomically: ,稍后傳遞參數等。
  3. 查找使用API​​的其他人的代碼。

就是這樣 當然,您可以像以前一樣猜測參數類型,但這可能需要更長的時間。 在某些情況下,您不會很幸運地獲得例外。 應用程序只會因分段錯誤而崩潰,這幾乎沒有用。 即使是崩潰日志也可能無法提供很多信息。 對於C函數(例如CoreTelephony API或C ++類),這尤其困難。 許多API期望指向CoreFoundation對象,C結構和一些內部對象的指針。 參數錯誤-分段錯誤。 在這種情況下,只有拆卸才能為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM