2012-03-09 2 views
4

Я пытаюсь изучить метод swizzling. Я создал программу в объекте C, которая просто вызывает метод в своем классе. Теперь я пытаюсь загрузить динамическую библиотеку с помощью DYLD_INSERT_LIBRARIES, чтобы я мог переопределить реализацию моего метода новым методом, который определен в моей динамической библиотеке. Цель состоит в том, чтобы изменить аргумент, а затем вызвать исходный вызов функции.Objective C Method 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 с использованием динамической библиотеки (код Injection).

+3

Итак, у вас есть класс под названием «Шифрование», и вы пытаетесь загрузить dylib, который содержит класс под названием «Шифрование». У вас не может быть двух классов с одинаковым именем. – hooleyhoop

ответ

1

Это связано с тем, что оба класса имеют одинаковое имя. Просто переименуйте тот, который будет EncryptionDylib, или аналогичный.

Также обратите внимание, что методы ObjC должны начинаться с строчной буквы, а не в верхнем регистре (то есть -Encrypt: должно быть -encrypt :).

Смежные вопросы