能力值:
( LV13,RANK:380 )
|
-
-
2 楼
IDA语境中的LIB文件是VC语境中的.obj文件,不是VC语境中的.lib文件
VC语境中的.obj文件是COFF文件类型,.lib文件是Unix Archiever文件类型(!)。
而VC多线程静态库.obj文件,主要(!)在
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src\intel\mt_lib里面
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
多谢指点
但对VC 多线程静态版本的 C Run-Time Library 能有一些疑问:
你说“VC多线程静态库.obj文件,主要(!)在C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src\intel\mt_lib里面”, 那如果VC程序调用了多线程静态库中的函数,那么该程序在链接时连接的是Vc7\lib目录下相应的.lib文件,还是Vc7\crt\src\intel\mt_lib目录下相应的.obj文件??? 因为我认为Vc7\lib目录已经包含了VC程序可能用到的所有的静态库了(比如C Run-Time Library就在该目录下),如果真得如你所说,那Vc7\crt\src\intel\mt_lib目录和 Vc7\lib目录下的库文件不是很多都重叠了吗?
|
能力值:
( LV13,RANK:380 )
|
-
-
4 楼
《补充》
因为.lib文件的文件类型是Unix Archive,可以调用ar来查看。ar命令是集成在Unix Shell中的。如果你是windows的操作系统,需要在Mingw下查看。命令行为
ar -t "c:\\libcmt.lib"
在我机子上显示为
build/intel/mt_obj/_ctype.obj
build/intel/mt_obj/_fptostr.obj
build/intel/mt_obj/_mbslen.obj
build/intel/mt_obj/_wctype.obj
build/intel/mt_obj/atof.obj
build/intel/mt_obj/atox.obj
build/intel/mt_obj/fcvt.obj
build/intel/mt_obj/gcvt.obj
build/intel/mt_obj/isctype.obj
...
太多了,大概有七百个文件。
----------------------引用
VC多线程静态库.obj文件,主要(!)在C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src\intel\mt_lib里面
----------------------引用
这里确实是说错了,原因是我没有仔细核查原文件。MS对于文件类型的扩展还没有公开的文档描述。
这几百个文件只有一小部分(!)是以独立的(!)方式存储在下面的文件夹中。
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src\intel\mt_lib
至于其它的文件?
Unix中的.a确实集成了它所声明的所有.obj文件,但MS中的.lib我仍存疑,我的推断:有的集成了.obj,有的没有集成.obj,或有的只集成了一部分.obj。
请仔细检查libcmt.lib,来努力推翻我。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我觉得“VC中的静态库(.lib)是不是集成了它所声明的所有.obj ”并不重要啊。 VC程序连接时,所链接的静态库是来自于 Microsoft Visual Studio\VC\lib目录 和 Microsoft Visual Studio\VCPlatformSDK\lib目录(我安装的是VS2005), 并不会链接..\VC\crt\src\intel\mt_lib下的.obj文件(..\VC\crt\src\intel\mt_lib的.obj文件存在的作用)。 所以,编程时只需要引入合适的库就可以了,不需要了解 VC中的静态库(.lib)集成了那些.obj文件,应该不会出现“.lib没有集成它所声明的某个.obj”吧,因为微软应该不会犯那样的错误吧
另外,用Flair做libcmt.lib出错的具体信息为:
命令: pcf libcmt.lib libcmt.pat
提示是: Fatal [libcmt.lib] <build\intel\st_obj\tcmap\chr.obj>: not a coff module
应该是里面的一个.obj文件不是coff格式,所以我觉得可行的做法是:把libcmt.lib 解为很多个obj,在用依次用pcf命令生成.pat文件,最后再用sigmake 一次生成.sig文件
|
能力值:
( LV13,RANK:380 )
|
-
-
6 楼
-------------------
我觉得可行的做法是:把libcmt.lib 解为很多个obj,在用依次用pcf命令生成.pat文件,最后再用sigmake 一次生成.sig文件
-------------------
我的基本思路也是如此。
希望你能做出这样的工具,可以把libcmt.lib中的所有.obj都提取出来。
ar.exe没有成功,ar2idt.exe没有成功。
我现在没有动力和时间做这样的工具。
希望你可以做出来,贡献社区。
|
|
|