Цель C Метод Swizzling с использованием динамической библиотеки

Я пытаюсь научиться меткому методу. Я создал программу с целью C, которая просто вызывает метод в своем классе. Теперь я пытаюсь загрузить динамическую библиотеку, используя DYLD_INSERT_LIBRARIES, чтобы я мог переопределить реализацию моего метода новым методом, который определен в моей динамической библиотеке. Цель состоит в том, чтобы изменить аргумент и затем вызвать исходный вызов функции.

Код программы доступен по адресу http://pastebin.com/a0b3qkgB. Код для динамической библиотеки доступен по адресу http://pastebin.com/Ndf6VdUt

Что я заметил, как только строка "if (self == [Encryption class]) {" будет выполнена в динамической библиотеке, код отобразит имя класса, а затем выплюнет странное сообщение. Полный вывод:

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, используя динамическую библиотеку (внедрение кода).

1 ответ

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

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

Другие вопросы по тегам