For any dynamic executable on Linux there is a dynamic linker that stores the current symbol bindings somewhere. So when a new library is loaded it knows whether to bind the symbol or not.
For example when two shared objects contain the same symbol, the first one loaded will bind the symbol and subsequent loads won't rebind the symbol.
So this means there should be a register somewhere in memory that stores the current bindings. How can I access it? What format does it have? How portable is it (what's the chance my program that lists the symbols will work on other computers)?