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

  • 相关阅读:
    二分查找思路以及可能出现情况对应解决办法
    多线程知识点大纲
    服务器consul启动方法
    大白话带你认识 ZooKeeper !重要概念一网打尽!
    「Netty实战 02」手把手教你实现自己的第一个 Netty 应用!新手也能搞懂!
    从 BIO、NIO 聊到 Netty,最后还要实现个 RPC 框架!
    什么是P问题、NP问题和NPC问题
    期刊汇总
    Typora 使用
    TCA 复习
  • 原文地址:https://www.cnblogs.com/bitxj/p/2727338.html
Copyright © 2011-2022 走看看