2012-03-09 9 views
4

私はメソッドスウィズルを学習しようとしています。私は客観的なCで、クラス内のメソッドを呼び出すプログラムを作成しました。今私のDYLD_INSERT_LIBRARIESを使用して動的ライブラリをロードしようとしていますので、私の動的ライブラリで定義されている新しいメソッドでメソッドの実装をオーバーライドできます。目的は、引数を変更して元の関数呼び出しを呼び出すことです。目的Cメソッドダイナミックライブラリを使用したスウィズリング

プログラムコードは、動的ライブラリのコードは、私は、すぐにラインとして「(自己== [暗号化クラスは]){場合、」ダイナミックで実行されることを観察している何http://pastebin.com/Ndf6VdUt

でご利用いただけますhttp://pastebin.com/a0b3qkgB でご利用いただけますライブラリ、コードは、クラス名を表示し、奇妙なメッセージを吐き出す。 完了出力:

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を読み込もうとしています。同じ名前のクラスを2つ持つことはできません。 – hooleyhoop

答えて

1

これは、両方のクラスが同じ名前を持つためです。 EncryptionDylibなどの名前に変更するだけです。

ObjCメソッドは大文字ではなく小文字で始まる必要があります(例:-Encrypt:-encrypt :)。

関連する問題