Let's say I'm using a c or c++ library (B) (with eventually inline and templates in header) that I use as a dynamic library (B) in my own library (A) or program.
What happens to the functions in the final assembly A (so/dll) ? In particular, if it's a template, an inline in the library B, or if it is part of an inlined function (in A) I defined ?
I'm interested to know if the assembly result finishes in my own assembly (ie., a bit of the external assembly is copied in my own assembly, parts of assembly B ends up in assembly A), and I can't distinguish it as a "used as external library function" vs "defined as my own code/assembly". In other words, will I be unable to see those functions as coming from an external library in the resulting library in a dynamic analysis, wether I provide symbols or not, in a release or debug assembly.
In particular, in a release assembly, will I see private (not exported) functions with a "meaningful" (call libraryBfunc
or call __hiddenBfunc
) in the assembly A or without (eg., call FUN_180032c4c
) ? For instance, once I disassembled my library A, instead of some:
CALL qword ptr [->KERNEL32.DLL::GetFileType]
or
addr KERNEL32.DLL::RtlUnwindEx
will I get for instance:
CALL FUN_180032c4c
?
Another way to see this is: can I hide that I use a certain function from a dynamic library by inlining my function that uses it? is this hidding occurs systematically when the external library functions are templates or inlined functions?