<p>You've got some kind of <a href="https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem">XY-problem</a>.</p> <p>The truth is: it's IDA who so to say "changes" the name of (something she thinks is) a function from absolutely nothing to <code>sub_{address}</code>. Why on earth would <code>PE-file</code> have non-exported symbols stored in it? Some kind of masochism? To give a candy to reversers?</p> <p>Thus, you have at least three ways of dealing with your problem:</p> <ul> <li>pray and hope that IDA's <a href="https://www.hex-rays.com/products/ida/tech/flirt/in_depth.shtml">FLIRT</a> will heuristically recognize <code>printf</code>;</li> <li><code>link</code> your program with debug-info: <a href="http://msdn.microsoft.com/en-us/library/aa235413.aspx"><code>-debug</code></a> which tells linker to generate <a href="http://en.wikipedia.org/wiki/Program_database"><code>pdb</code></a>-file which IDA will query for all the symbols stored for your application;</li> <li>tell linker to <a href="http://msdn.microsoft.com/en-us/library/aa235424.aspx"><code>-export:printf</code></a> so that it's name will be in export directory and you can get it's address easily even programmatically.</li> </ul>