多饰/错位版本从相同的功能在一个单一的库(Multiple decorated/mangled ve

2019-10-23 02:32发布

当您转储库的外部符号,你会发现有相同的函数名的多个版本; 如与本案printf C库函数,你会发现喜欢的名字

__imp__printf
_printf
___imp___printf_l

为什么没有任何的功能只有一个版本?

当我试图看看哪些OBJ成员,他们是属于图书馆,我发现,它们都属于同一个OBJ文件(导入库),其只有一个版本,这是_printf ,这是唯一的PROC名称中所有这些版本,和他们的休息是“DATA”。

图书馆是MSVCRTD.LIB和库成员是MSVCR100D.dll,该平台是微软Windows 7和Visual C ++。

谁能解释这样对我?

编辑:将大部分的“printf的”在MSVCRTD.LIB库我的眼睛能赶上,居然还有更多。

其中一些属于同一OBJ成员在库(根据它抵消图片数量),有些则不是。 我需要理解为什么所有这些版本的printf的的C库中的存在吗? 有它们的存在,以支持多个编译器(与几个忙玲)可能调用printf函数? 因为当我从MASM所谓的printf它装饰它被_printf ,当我从C编译器把它称为,它的装饰它被__imp__printf ,所以我猜这些多个版本可能存在支持可能使用的库不同的编译器,这是否正确或不?

请我需要了解接头以及它们如何工作,以及这个问题的答案将帮助我很多。 我们只有一个printf的也就是我们所说的所有的时间,为什么连接器需要所有这些?

文章来源: Multiple decorated/mangled versions from the same function in a single library