2016-06-12 20 views
0

Alles in c-Code, ich habe einen Linux-Gnome-Prozess, der zwei Bibliotheken libA.so und libB.so laden kann.Linux-Prozess: dynamisch eine Variable zwischen zwei Bibliotheken teilen

libA muss eine globale Variable int varA exportieren.

libB muss nur auf varA zugreifen, wenn libA im Prozess vorhanden ist.

Wie kann ich tun, mit folgenden Maßgabe:

libb wird nicht auf Liba verknüpfen. Außerdem ist es möglich, dass der Prozess nur libB lädt und niemals libA. Ich kontrolliere den Prozess nicht, daher sollte kein Code im Prozessquellcode enthalten sein. Nur Code in libB ist erlaubt: Er muss überprüfen, ob libA im Prozess vorhanden ist, und wenn dies der Fall ist, muss er auf varA zugreifen. Wenn libA nicht vorhanden ist, sollte libB darauf achten, dass es nicht auf varA zugreifen kann.

Ich dachte über die Verwendung von g_module_open/g_module_symbol, aber ich denke, es würde zwingen, libA zu laden, die ich nicht will. Wie kann ich programmatisch in libB überprüfen, ob libA vorhanden ist und dann nur in diesem Fall auf varA zugreifen?

Antwort

0

dl_iterate_phdr und dlsym sind die zu verwendenden APIs, um dieses Problem zu lösen.