Цель C Метод Swizzling с использованием динамической библиотеки - PullRequest
4 голосов
/ 09 марта 2012

Я пытаюсь научиться меткому методу.Я создал программу с целью 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 Ответ

1 голос
/ 20 ноября 2012

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

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

...