title: Is it possible to uniquely identify dynamically imported functions by their name?
body: <p>I used</p>
  
  <pre><code>readelf --dyn-sym my_elf_binary | grep FUNC | grep UND
  </code></pre>
  
  <p>to display the dynamically imported functions of <code>my_elf_binary</code>, from the dynamic symbol table in the <code>.dynsym</code> section to be precise. Example output would be:</p>
  
  <pre><code> [...]
   3: 00000000     0 FUNC    GLOBAL DEFAULT  UND tcsetattr@GLIBC_2.0 (3)
   4: 00000000     0 FUNC    GLOBAL DEFAULT  UND fileno@GLIBC_2.0 (3)
   5: 00000000     0 FUNC    GLOBAL DEFAULT  UND isatty@GLIBC_2.0 (3)
   6: 00000000     0 FUNC    GLOBAL DEFAULT  UND access@GLIBC_2.0 (3)
   7: 00000000     0 FUNC    GLOBAL DEFAULT  UND open64@GLIBC_2.2 (4)
   [...]
  </code></pre>
  
  <p>Is it safe to assume that the names associated to these symbols, e.g. the <code>tcsetattr</code> or <code>access</code>, are always unique? Or is it possible, or reasonable<sup><strong>*)</strong></sup>, to have a dynamic symbol table (filtered for <code>FUNC</code> and <code>UND</code>) which contains two entries with the same associated string?</p>
  
  <p>The reason I am asking is that I am looking for a unique identifier for dynamically imported functions ...</p>
  
  <p><strong>*)</strong> Wouldn't the dynamic linker resolve all "<code>UND FUNC</code> symbols" with the same name to the same function anyway?</p>