当您转储库的外部符号,你会发现有相同的函数名的多个版本; 如与本案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的也就是我们所说的所有的时间,为什么连接器需要所有这些?