Windows程序调试--创建映射文件

来源:互联网 发布:最新网络购物数据分析 编辑:程序博客网 时间:2024/06/10 21:29
 创建映射文件

       做事后调试需要一个对应于程序创建的所有模块的映射文件。

       映射文件包含对应模块的最佳装载地址、段表、输出符号地址、静态符号地址以及程序代码地址和源程序行号的映射。

    为你的程序创建映射文件,你必须对Visual C++工程中的相应选项作适当的设置。第一步是打开映射文件生成功能、你可以在工程设置对话框里进行设置,在Link标签里的Debug类里打开Generate mapfile选项。由于一些奇怪的原因,Visual c++没有把输出程序的代码地址和源代码行号里的映射作为默认设置。要得到这些信息,还需要在Project Options对话框里键入“/MAPINFO:LINES”。得到引出序号(exorpt ordinal)也许很有用,所以在Project Object对话框末尾里也要键入“/MAPINFO:EXPORTS”。

    如果程序在一个非常低的地址上崩溃,或奇怪的地址,显然没有任何合法指令。原因可能为:

l         代码试图用一个非法函数指针调用函数

l         在调用者和实际函数之间存在原型不匹配

l         堆栈已经被破坏了,通常是局部变量的一处导致的函数返回地址被破坏掉了

 

前两种情况,函数调用已经失败,被调用函数也就没有机会将堆栈基址指针、局部变量以及保存寄存器压入堆栈,意味着函数返回地址刚好就在堆栈顶,很容易退回到源代码。

如果为堆栈破坏,返回地址本身被覆盖的数据修改了,可能会给一些提示,如,如果指针地址看起来像4ANSI字符(如地址0x73677562,代表ANSI的“bugs”),就可能是被一个局部字符串给覆盖了;

       windows里发生崩溃几乎可以肯定是你代码中的错误导致的,然而,驱动程序中的崩溃极有可能就是驱动程序自身的错误