在使用WinDBG时,要加载调试符号则是使用的编译器生成的标准PDB调试库。

而在OD中,有两类调试信息来源:

1.PDB文件

2.LIB文件

其中,LIB文件在查找导入符号时,能够发挥重要的作用。

 

下文将解释OD和VS2008使用LIB库的一些条件:

1.简介

例如众所周知的MFC库大量使用了DLL导出序号,因此在OD中查看这些导入信息时,都只能看到序号。

为了增加可读性,可以在OD中使用 “选择导入库” 功能来加载LIB信息,这样就可以在名称表中看到DLL的原始导入名称了。

在创建DLL工程时,程序员可以选择以序号输出导出函数。

2.VC2008的编译设置

在VC2008中,可以使用DEF文件来完成这项任务。其方法是,在工程中增加一个DEF文件。

DEF文件中的导出符号如下所示:

LIBRARY   TestLib
EXPORTS
   fnTest   @1 NONAME

其中:

TestLib是导出库名称

fnTest @1 NONAME表示了,fNTest是导出的原始函数名,将导出为序号为1的函数,NONAME表示强制不输出函数名称

LIB文件中存储了fnTest这种名称,当程序使用以上导入库时,在lib中匹配fnTest函数名称,然后按照序号1来链接。

 在VC2008中,如果要输出序号只能用DEF文件来实现,__declspec(dllexport)这种默认方式只能输出名称。

3.VC2008的链接设置

链接时,必须在链接器指定命令行选项:/DEF:TestLib.def,则编译器会使用DEF文件作为导出参考。

 4.OD应用LIB信息

OD可以利用LIB来还原fnTest这个信息。

而且,OD在加载DLL时,会比较智能的在当前目录下寻找DLL同名的LIB文件作为导入信息库。