OD与调试符号

摘要:
使用编译器生成的标准PDB调试库用于加载调试符号。在LIB文件中查找导入符号时,1。例如,众所周知的MFC库使用大量DLL导出序列号,因此在OD中查看这些导入信息时,该函数加载LIB信息,程序员可以选择以序列号输出导出函数。DEF文件中的导出符号如下:NONAME表示强制不输出函数名。名称fnTest存储在LIB文件中,函数名称fnTest在LIB中匹配。

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

免责声明:文章转载自《OD与调试符号》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mybatis拦截器实现SQL性能监控.NET Core实战项目之CMS 第十五章 各层联动工作实现增删改查业务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Jmeter(八)

 ------------------------------------------------------------------- 转载自:北京-宏哥 https://www.cnblogs.com/du-hong/p/13037317.html ----------------------------------------------------...

docker日志设置

最近查看docker日志的时候,使用命令docker log -f 会出现日志无限翻滚的情况,这些日志都是打印到控制台的,但是都被docker收集了起来,放到了/var/lib/docker/containers/{容器id}/*.log中,一般默认的日志格式是{容器id}-json.log,如果日志大小不加限制,很可能日志会无限增长最终撑爆磁盘。 首先先...

SpringBoot入门及YML文件详解

SpringBoot 简介 微框架,与 Spring4 一起诞生,基于约定、生来为了简化 spring 的配置 优点 可以快速的上手,整合了一些子项目(开源框架或者第三方开源库) 可以依赖很少的配置快速的搭建项目 基于 spring 使开发者快速入门,门槛很低。 可以创建独立运行的应用而不需要依赖容器 提供很多 maven 极简配置,缺点是会引入很多不需...

17.U-boot的工作流程分析-6410

17.U-boot的工作流程分析-6410 6410开发板: 1.uboot的入口: 要看uboot工程的入口,首先打开顶层目录的Makefile: Uboot所支持的开发板,在顶层的Makefile中都会有一个配置选项。比如6410,在Makefile中的配置选项是make forlinx_nand_ram256_config:在vim的命令模式按...

python egg

经常接触Python的同学可能会注意到,当需要安装第三方python包时,可能会用到easy_install命令。easy_install是由PEAK(Python Enterprise Application Kit)开发的setuptools包里带的一个命令,它用来安装egg包。egg包是目前最流行的python应用打包部署方式。如何制作和安装egg包...

flume使用之httpSource

flume自带很长多的source,如:exe、kafka...其中有一个非常简单的source——httpsource,使用httpSource,flume启动后会拉起一个web服务来监听指定的ip和port。常用的使用场景:对于有些应用环境中,不能部署Flume SDK及其依赖项,可以在代码中通过HTTP而不是Flume的PRC发送数据的情况,此时HT...