Я пытаюсь изучить метод 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).
Итак, у вас есть класс под названием «Шифрование», и вы пытаетесь загрузить dylib, который содержит класс под названием «Шифрование». У вас не может быть двух классов с одинаковым именем. – hooleyhoop