Я исследую линкер Маха c dyld
. Этот вопрос относится ко всем платформам Apple, но рад получить ответ, который будет зависеть от конкретной платформы; Я использую Obj C, но также с удовольствием переведу Swift, если это работает для вас. Соответствующие документы Apple можно найти здесь .
Я пытаюсь решить проблему взаимоблокировки в библиотеке, которую я поддерживаю, и поэтому мне нужно собрать информацию о загруженных двоичных изображениях. (для непосвященных это не изображения в формате JPEG).
Я зарегистрировал обратный вызов для отслеживания добавления двоичного изображения через _dyld_register_func_for_add_image()
, и он вызывается при загрузке изображений. Я вижу, как передается структура mach_header
, а также значение vmaddr_slide
.
По разным причинам, позволяющим избежать взаимоблокировок, я не хочу перебирать изображения, используя _dyld_image_count()
/ _dyld_get_image_header()
post-ho c, но вместо этого хочу отслеживать изображения по мере их загрузки / выгружается исключительно с помощью обратных вызовов add()
/ remove()
. Обычно я мог бы вызвать _dyld_get_image_name(index)
, чтобы получить имя изображения, когда я повторял изображения, но, как я уже сказал, я не могу использовать итерационную модель.
Мой вопрос: на основе значений переданный в func_for_add_image()
обратный вызов (с использованием любых дополнительных системных вызовов, необходимых), как я могу определить имя изображения?