Size: a a a

2020 April 29

VO

Vyacheslav Olkhovchenkov in pro.cxx
чего тут расплывчатого? elf первоначально грузится /libexec/ld-elf.so.1 например. или /lib/x86_64-linux-gnu/ld-2.27.so. которые читают исполняемый файл, берут оттуда секции, библиотеки, символы и правят что надо. исходники доступны. ну или потом, в процессе через dlopen из libc, опять же исходники доступны.
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
ну а тебе надо будет на основе написать свою реализацию кторая по каким-то известным тебе правилам будет в одном случае линковать regex с libc regex, а в другом -- с musl regex
источник

АК

Александр Караев in pro.cxx
Vlad Faust
Заменить в либах вызовы символа, скажем, libc_regex() на gnu_libc_regex() и musl_libc_regex() соответственно на этапе линковки? Или заменять символ в рантайме в зависимости от того, внутри какой либы на данный момент?
LD_PRELOAD может помочь
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
в некоторых OS существует поддержка libmap.conf через который возможно задать такое:
    # Glue for Linux-only EPSON printer .so to be loaded into cups, etc.
    [/usr/local/lib/pips/libsc80c.so]
    libc.so.6               pluginwrapper/pips.so
    libdl.so.2              pluginwrapper/pips.so
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
Александр Караев
LD_PRELOAD может помочь
не может
источник

VF

Vlad Faust in pro.cxx
Vyacheslav Olkhovchenkov
чего тут расплывчатого? elf первоначально грузится /libexec/ld-elf.so.1 например. или /lib/x86_64-linux-gnu/ld-2.27.so. которые читают исполняемый файл, берут оттуда секции, библиотеки, символы и правят что надо. исходники доступны. ну или потом, в процессе через dlopen из libc, опять же исходники доступны.
Спасибо, буду копать 🙂
источник

АК

Александр Караев in pro.cxx
Почему?
Если нужно перехватывать прилинкованные динамически символы и вручную перенаправлять на нужные, то вполне
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
потому что надо то в одну библиотеку, то в другую. а ld_preload позволяет только безусловно
источник

АК

Александр Караев in pro.cxx
Vyacheslav Olkhovchenkov
потому что надо то в одну библиотеку, то в другую. а ld_preload позволяет только безусловно
Я предлагаю через LD_PRELOAD подгружать свою, третью библиотеку, которая на рантайме уже выберет между musl/libc
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
у тебя все равно будет проблема что есть regex() из libc.so и regex из musl.so. как ты их свяжешь?
источник

VF

Vlad Faust in pro.cxx
А на основании каких критериев будет происходить этот выбор? Каждая из либ использует libc_regex и ей невдомёк, что могут существовать разные реализации libc
источник

VF

Vlad Faust in pro.cxx
Vyacheslav Olkhovchenkov
у тебя все равно будет проблема что есть regex() из libc.so и regex из musl.so. как ты их свяжешь?
Для ясности — glibc и muslc
источник

АК

Александр Караев in pro.cxx
Ну это уже вопрос не вопрос подмены, а вопрос критериев. LD_PRELOAD позволяет на рантайме выбрать (хоть свою реализацию взять), а как выбирать - это уже другой вопрос :)
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
ну я же привел пример с libmap.conf
источник

VF

Vlad Faust in pro.cxx
Vyacheslav Olkhovchenkov
ну я же привел пример с libmap.conf
Да, это классное решение, буду знать
источник

DF

Dollar Føølish in pro.cxx
Vyacheslav Olkhovchenkov
ну а тебе надо будет на основе написать свою реализацию кторая по каким-то известным тебе правилам будет в одном случае линковать regex с libc regex, а в другом -- с musl regex
И проставить rt_interp в бинарник?
источник

VO

Vyacheslav Olkhovchenkov in pro.cxx
а это зависит от того как библиотеки будет грузиться. если через что-то типа dlopen, а не прямо на старте -- то не обязательно, достаточно своей реализации dlopen(), паример под именем dlopen_namespaces()
источник

DF

Dollar Føølish in pro.cxx
Понятно, спасибо
источник

K

Kasper in pro.cxx
Здравствуйте, отправьте пожалуйста пример сложного кода на C++, такого, который прочитать сложно и в то же время он работает
источник

DF

Dollar Føølish in pro.cxx
Буст
источник