2012-03-09 50 views
4

我想學習方法swizzling。我在Objective C中創建了一個程序,它只是在其類中調用一個方法。現在我正在嘗試使用DYLD_INSERT_LIBRARIES加載動態庫,這樣我就可以用動態庫中定義的新方法覆蓋我的方法實現。目的是修改參數,然後調用原始函數調用。Objective C方法使用動態庫Swizzling

程序代碼可在http://pastebin.com/a0b3qkgB 動態庫中的代碼可在http://pastebin.com/Ndf6VdUt

我所觀察到的,一旦行「如果(自== [加密類]){」獲取動態執行庫中,代碼顯示類名,然後吐出奇怪的消息。 完成輸出:

Test-IPhone:~ root# DYLD_INSERT_LIBRARIES="./evil7.dylib" ./new 
objc[324]: Class Encryption is implemented in both /private/var/root/evil7.dylib and /private/var/root/./new. One of the two will be used. Which one is undefined. 
Inside load function 
objc[324]: Encryption: 
Trace/BPT trap 

我不確定代碼有什麼問題。任何幫助,將不勝感激。

目標是使用動態庫(代碼注入)覆蓋客觀的C方法。

+3

因此,您有一個名爲「加密」的類,並且您試圖加載一個包含名爲「加密」的類的dylib。你不能有兩個同名的類。 – hooleyhoop 2012-03-09 18:23:34

回答

1

這是因爲兩個類具有相同的名稱。只需將其中一個重命名爲EncryptionDylib或類似。

另請注意,ObjC方法應該以小寫字母開頭,而不是大寫字母(即-Encrypt:應該是-cryptpt :)。