Будет ли использование DYLD_INTERPOSE для функции C в одной статической библиотеке iOS вставлять ее для всех других библиотек в комплекте?

У меня есть цель статической библиотеки c с некоторыми функциями C, поведение которых мне нужно изменить на основе вызывающих. Я просмотрел https://opensource.apple.com/source/dyld/dyld-210.2.3/include/mach-o/dyld-interposing.h и увидел, что его можно использовать для существенного изменения функций C.

Мой вопрос: будет ли dyld_interpose также вставлять функцию C во все библиотеки/фреймворки, содержащие мой промежуточный код?

eg.

Library1 - имел функцию C

void foo(int bar) {
...
}

Library2 - Имеет вставочный код. Зависит от библиотеки1

void my_foo(int bar) {
...
}

DYLD_INTERPOSE(my_foo, foo);

Будет ли также вставлена ​​библиотека 3, зависящая как от библиотеки 1, так и от библиотеки 2? А если он прикреплен к заявке? Я добился некоторого успеха, заставив его работать над фреймворком.


person gran_profaci    schedule 05.10.2020    source источник
comment
Там нет динамической части DYLD, когда статическая библиотека компонуется, она сама становится частью исполняемого бинарного файла вашего приложения. Любым вызывающим абонентам придется применять дополнительную логику самостоятельно (поскольку они делают прямой вызов фрагмента кода, а не косвенный, как это делают динамические функции dyld через dyld_stub_binder трамплин). Возможно, указатель на оболочку функции C был бы подходящим вариантом в вашем случае для этого дополнительного уровня логики. Несколько связанная тема статические символы в macos mach или двоичные файлы с внешними символами"> stackoverflow.com/questions/56880169/   -  person Kamil.S    schedule 17.10.2020