Процесс Linux: динамически обмениваться переменной между двумя библиотеками

Все в коде c, у меня есть один процесс linux Gnome, который может загружать две библиотеки libA.so и libB.so.

libA необходимо экспортировать глобальную переменную int varA.

libB должен обращаться к varA, только если libA присутствует в процессе.

Как я могу сделать это со следующим ограничением:

libB не должна связываться с libA. Также возможно, что процесс загружает только libB и никогда не касается libA. Я не контролирую процесс, поэтому код не должен находиться в исходном коде процесса. Разрешается только код в libB: он должен проверить, присутствует ли libA в процессе, и если это так, ему нужно получить доступ к varA. Если libA отсутствует, libB должен знать, что не может получить доступ к varA.

Я думал об использовании g_module_open / g_module_symbol, но я думаю, что это заставит загружать libA, чего я не хочу. Как я могу программно проверить в libB, присутствует ли libA, а затем получить доступ к varA только в этом случае?


person gregoiregentil    schedule 12.06.2016    source источник


Ответы (1)


dl_iterate_phdr и dlsym — это API, которые можно использовать для решения этой проблемы.

person gregoiregentil    schedule 13.06.2016