zoukankan      html  css  js  c++  java
  • OD与调试符号

    在使用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文件作为导入信息库。

  • 相关阅读:
    java继承
    Linux下word转pdf以及unoconv中文乱码问题
    jquery点击事件捕获
    在Windows上玩TensorFlow(一)——安装Docker【转】
    php面试总结
    [转载] PHP 线程,进程和并发
    微信小程序数据解密
    sql基础整理
    PHP 底层的运行机制与原理【转载】
    react-native 运行原理【转载】
  • 原文地址:https://www.cnblogs.com/bitxj/p/2727338.html
Copyright © 2011-2022 走看看