反汇编定位代码崩溃位置_1

2023-05-16

原帖:http://blog.csdn.net/gwzz1228/article/details/9045853


利用map,cod文件定位崩溃代码行

利用vs2010 新建一个空的控制台项目,添加文件gtg.cpp,内容如下

void crash()

{

         inti=1;

         intj=0;

         i/=j;

}

int main()

{

         crash();

         return0;

}

配置生成map及cod文件

项目-》属性-》连接器-》调试-》生成映射文件-》是 (/MAP)

项目-》属性-》c/c++-》输出文件-》汇编程序输出-》程序集、机器码和源代码 (/FAcs)

然后将增量编译关闭,否则会连接错误;

编译生成项目,运行,出现如下异常窗口

 

其中的故障模块名称及异常偏移是关键信息,

从异常模块名称 ddd.exe 我们知道问题代码应在ddd.map中

ddd

 

 Timestamp is 5145d550 (Sun Mar 17 22:38:082013)

 

 Preferred load address is 00400000

 

 Start        Length     Name                   Class

 0001:00000000 00001b3cH .text                   CODE

 0002:00000000 000000e0H .idata$5                DATA

 0002:000000e0 00000004H .CRT$XCA                DATA

 0002:000000e4 00000004H .CRT$XCAA               DATA

 0002:000000e8 00000004H .CRT$XCZ                DATA

 0002:000000ec 00000004H .CRT$XIA                DATA

 0002:000000f0 00000004H .CRT$XIAA               DATA

 0002:000000f4 00000004H .CRT$XIY                DATA

 0002:000000f8 00000004H .CRT$XIZ                DATA

 0002:00000100 000009d0H .rdata                  DATA

 0002:00000ad0 00000036H .rdata$debug            DATA

 0002:00000b10 00000004H .rdata$sxdata           DATA

 0002:00000b14 00000004H .rtc$IAA                DATA

 0002:00000b18 00000004H .rtc$IMZ                DATA

 0002:00000b1c 00000004H .rtc$IZZ                DATA

 0002:00000b20 00000004H .rtc$TAA                DATA

 0002:00000b24 00000004H .rtc$TMZ                DATA

 0002:00000b28 00000004H .rtc$TZZ                DATA

 0002:00000b30 0000009cH .xdata$x                DATA

 0002:00000bcc 00000028H .idata$2                DATA

 0002:00000bf4 00000014H .idata$3                DATA

 0002:00000c08 000000e0H .idata$4                DATA

 0002:00000ce8 000003c4H .idata$6                DATA

 0002:000010ac 00000000H .edata                  DATA

 0003:00000000 0000002cH .data                   DATA

 0003:00000030 00000384H .bss                    DATA

 

 Address         Publics byValue              Rva+Base       Lib:Object

 

 0000:00000001       ___safe_se_handler_count   00000001    <absolute>

 0000:00000000       ___ImageBase               00400000     <linker-defined>

 0001:00000000      ?crash@@YAXXZ             00401000 f   gtg.obj

 0001:00000040       _main                      00401040 f   gtg.obj

 0001:00000080       __RTC_InitBase             00401080 f   MSVCRTD:_init_.obj

………………………………省略……………………

 entry point at        0001:00000380

 

 Static symbols

 

 0001:00000290       _pre_c_init                00401290 f   MSVCRTD:crtexe.obj

 0001:00000320       _pre_cpp_init              00401320 f   MSVCRTD:crtexe.obj

 0001:000003a0       ___tmainCRTStartup         004013a0 f   MSVCRTD:crtexe.obj

 0001:00000610       _check_managed_app         00401610 f   MSVCRTD:crtexe.obj

 0001:000007a0       ?failwithmessage@@YAXPAXHHPBD@Z 004017a0f   MSVCRTD:_error_.obj

 0001:000009c0       ?DebuggerProbe@@YAHK@Z     004019c0 f   MSVCRTD:_error_.obj

 0001:00000a50       ?DebuggerRuntime@@YAHKHPAXPB_W@Z00401a50 f   MSVCRTD:_error_.obj

 0001:00000d30       ?_getMemBlockDataString@@YAXPAD00I@Z00401d30 f   MSVCRTD:_error_.obj

 0001:00001750       ?GetPdbDll@@YAPAUHINSTANCE__@@XZ00402750 f   MSVCRTD:_pdblkup_.obj

 

下面我们通过异常偏移信息定位出错位置所在函数:

崩溃偏移行地址=异常偏移-0x1000(其中0x1000因为一般的 PE 文件的代码段都是从 0x1000 偏移开始的在)

此例中为0x1030-0x1000=0x30;

在map文件中Address 列查找第一个大于ox30的数偏移地址,及绿色行,其上一行(红色)即为异常代码所在函数,可以看出此函数来自gtg.obj,的crash函数,下面计算异常代码在crash函数的偏移行

0x1030-0x1000-0x00000000=0x30,

打开gtg.cod内容如下:

; Listing generated by Microsoft (R)Optimizing Compiler Version 16.00.30319.01

 

         TITLE        E:\Projects\ddd\ddd\gtg.cpp

         .686P

         .XMM

         includelisting.inc

         .model      flat

 

INCLUDELIB MSVCRTD

INCLUDELIB OLDNAMES

 

PUBLIC     ?crash@@YAXXZ                                          ;crash

EXTRN      __RTC_Shutdown:PROC

EXTRN      __RTC_InitBase:PROC

;        COMDATrtc$TMZ

; File e:\projects\ddd\ddd\gtg.cpp

rtc$TMZ  SEGMENT

__RTC_Shutdown.rtc$TMZ DDFLAT:__RTC_Shutdown

rtc$TMZ  ENDS

;        COMDATrtc$IMZ

rtc$IMZ   SEGMENT

__RTC_InitBase.rtc$IMZ DDFLAT:__RTC_InitBase

; Function compile flags: /Odtp /RTCsu /ZI

rtc$IMZ   ENDS

;        COMDAT?crash@@YAXXZ

_TEXT       SEGMENT

_j$ = -20                                                 ;size = 4

_i$ = -8                                                    ;size = 4

?crash@@YAXXZ PROC                                       ; crash,COMDAT

 

; 2   : {

 

 00000  55              push       ebp

 00001  8b ec                  mov        ebp, esp

 00003  81 ec d8 00 00

         00              sub          esp, 216                   ;000000d8H

 00009  53              push       ebx

 0000a  56              push       esi

 0000b  57              push       edi

 0000c   8d bd 28 ff ff

         ff                lea edi, DWORD PTR [ebp-216]

 00012  b9 36 00 00 00 mov        ecx, 54                      ; 00000036H

 00017  b8 cc cc cc cc   mov        eax, -858993460             ; ccccccccH

 0001c   f3 ab                   rep stosd

 

; 3   : int i=1;

 

 0001e  c7 45 f8 01 00

         0000                  mov        DWORD PTR _i$[ebp], 1

 

; 4   : int j=0;

 

 00025  c7 45 ec 00 00

         0000                  mov        DWORD PTR _j$[ebp], 0

 

; 5    : i/=j;

 

 0002c   8b 45 f8    mov        eax, DWORD PTR _i$[ebp]

 0002f   99              cdq

  00030  f7 7d ec    idiv DWORD PTR _j$[ebp]

 00033  89 45 f8    mov        DWORD PTR _i$[ebp], eax

 

; 6   : }

 

 00036  5f               pop         edi

 00037  5e              pop         esi

 00038  5b              pop         ebx

 00039  8b e5                  mov        esp, ebp

 0003b  5d              pop         ebp

 0003c   c3              ret 0

?crash@@YAXXZ ENDP                                       ; crash

_TEXT       ENDS

PUBLIC     _main

EXTRN      __RTC_CheckEsp:PROC

; Function compile flags: /Odtp /RTCsu /ZI

;        COMDAT_main

_TEXT       SEGMENT

_main       PROC                                                       ;COMDAT

 

; 8   : {

 

 00000  55              push       ebp

 00001  8b ec                  mov        ebp, esp

 00003  81 ec c0 00 00

         00              sub          esp, 192                   ;000000c0H

 00009  53              push       ebx

 0000a  56              push       esi

 0000b  57              push       edi

 0000c   8d bd 40 ff ff

         ff                lea edi, DWORD PTR [ebp-192]

 00012  b9 30 00 00 00 mov        ecx, 48                      ; 00000030H

 00017  b8 cc cc cc cc   mov        eax, -858993460             ; ccccccccH

 0001c   f3 ab                   rep stosd

 

; 9   : crash();

 

 0001e  e8 00 00 00 00 call ?crash@@YAXXZ           ; crash

 

; 10  : return 0;

 

 00023  33 c0                  xor eax, eax

 

; 11  : }

 

 00025  5f               pop         edi

 00026  5e              pop         esi

 00027  5b              pop         ebx

 00028  81 c4 c0 00 00

         00              add         esp, 192                   ;000000c0H

 0002e  3b ec                  cmp        ebp, esp

 00030  e8 00 00 00 00 call __RTC_CheckEsp

 00035  8b e5                  mov        esp, ebp

 00037  5d              pop         ebp

 00038  c3              ret 0

_main       ENDP

_TEXT       ENDS

END

定位到crash函数,上文第一个红色行,然后根据偏移行定位到第三个红色行,向上查看定位到第二个红色行,最后定位到异常代码出现在gtg.Cpp的第五行,哈哈一个简单的异常定位就结束了

要想熟练使用还需要了解map及cod文件的格式

需要中意的是map文件中有static symbols 和export symbols 在定位行数时这些符号也需要考虑


【出处】http://blog.csdn.net/caiyuanfa/article/details/8703288


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反汇编定位代码崩溃位置_1 的相关文章

  • keil,stm32,watch窗口,正确的串口数据后面还出现ASCII字符?

    这个问题不知道如何解决 xff0c 串口调试助手数据显示都是准确的 xff0c watch窗口看就不正确 不知道正确数据后面的是什么 xff1f
  • MS5611气压计数据测试报告

    气压计测得气压和温度值为模拟量 xff0c ms5611气压计会自动将模拟量转换成数字量 xff0c 对于不同的精度 xff0c 转换时间也不相同 本测试选用的精度为最高的OSR 61 4096 xff0c 如下表所示 xff0c 转换时间
  • Fatfs文件系统,f_open函数返回值为FR_DISK_ERR解决方法

    最近在操作TF卡 xff0c 芯片stm32f103c8t6 xff0c 编译环境KEIL xff0c 金士顿32G卡 xff0c 用Fatfs文件系统向卡中写入数据 出现的问题 xff1a f open函数返回值为FR DISK ERR
  • Fatfs文件系统向文件写内容出现f_write返回值为1的问题

    f write返回值为1 xff0c 则就是FR DISK ERR 1 A hard error occurred in the low level disk I O layer 低级磁盘I O层中发生硬错误 问题解决方式 xff1a 1
  • vl53l1x激光测距讲解

    使用模块 ATK VL53L0X激光测距模块或者淘宝其他模块 通信方式 xff1a IIC xff0c 接口SHUT用于开机启动时序中 xff0c int是中断模式中的引脚 xff08 触发中断 xff09 参考资料 xff1a https
  • 如何完成一篇发明专利

    专利的组成部分 xff1a 说明书摘要摘要附图权利要求书说明书说明书附图 参考的文献有 专利法 专利审查指南 xff0c 大致写完一篇发明专利需要半个月的时间 xff1b 参考网址 xff0c http www soopat com htt
  • cmd python 缩进 3个点

    问题描述 xff1a indentationerror expected an indented block for 语句和if语句都会遇到 xff0c 解决方法是for 语句和if语句冒号后 xff0c 按enter切换下一行 xff0c
  • 陀螺仪和加速度计MPU6050的单位换算方法

    对于四轴的初学者 xff0c 可能无法理解四轴源代码里面陀螺仪和加速度数据的那些数学转换方法 下面我们来具体描述下这些转换方法 我们首先来看陀螺仪数据 在MPU6050的手册里面 xff0c 提供了一个陀螺仪数据表如下 xff1a 在表格里
  • 【Final Project】Kitti的双目视觉里程计(1)

    1 从CMake文件了解整体结构 xff08 1 xff09 前置工作 0 xff09 文件结构 app CMakeLists txt run kitti stereo cpp CMakeLists txt cmake modules Fi
  • 觅香

    立于浮华之世 奏响天籁之音
  • 多旋翼无人机推荐书

    惯性仪器测试与数据分析 惯性导航 xff08 秦永元 xff09 先进 PID 控制 MATLAB 仿真 多旋翼飞行器设计与控制
  • 飞控PID详解

    串级PID xff1a 单极PID适合线性系统 xff0c 当输出量和被控制量呈线性关系时单极PID能获得较好的效果 xff0c 但是四轴不是线性系统 xff0c 现代学者认为 xff0c 四轴通常可以简化为一个二阶阻尼系统 为什么四轴不是
  • Keil:ST-LINK USB communication error

    error flash download failed target dll has been cancelled 1 USB口的问题 xff1a USB供电不好 xff0c 或则USB驱动程序或ST Link驱动程序有问题 我的解决方案就
  • Cadence OrCAD BOM如何输出封装信息

    Cadence OrCAD 如何输出带封装信息的BOM 1 选中DSN文件 xff0c 打开Tools菜单中 选择Bill of materials选项 2 Bill of materials对话框设置如下 3 ORCAD输出的BOM表是文
  • 随机排列算法及《算法导论》5.3节习题解答

    随机排列算法及 算法导论 5 3节习题解答 算法导论 介绍了两种随机排列数组的算法 第一种算法是为数组的每个元素A i 赋一个随机的优先级P i xff0c 然后依据优先级对数组A中的元素进行排序 例如 xff0c 如果初始数组A 61 1
  • 【Ubuntu-Tensorflow】GPU设置及显存资源分配

    最近笔者在做GPU显存资源分配的研究 xff0c 发现在tf中gpu一些实用的方法和接口 xff0c 共享出来 xff0c 供大家参考学习 xff0c 如有问题 xff0c 欢迎留言讨论 1 运行程序时 xff0c 控制台设置GPU运行参数
  • 为了解决jetson tx2的内存不足。挂载sd卡,并且使用docker在sd中安装jetPack的镜像。

    1 xff0c 使用nvidia官方的sdkmanager工具给jetson tx2刷机 xff0c 并且将sd卡挂载在系统目录下 参考ubuntu18 04主机 43 Jetson TX2 NX刷机 lgh15897723511的博客 C
  • 链表反转 - 链表排序 算法

    链表反转 xff1a 想象有1个新链表 xff0c 每次从旧链表取出一个元素 xff0c 然后插入到新链表的头部 链表排序 xff1a 先将链表拆分为2个子链表 使用快慢指针 xff0c 快指针每次走2步 xff0c 当快指针走到尾部时 x
  • 如何在Ubuntu服务器上安装桌面环境(GUI)

    本文转载至网络 原作者Chris Patrick Carias 你想在你的 Ubuntu 服务器上安装 GUI 吗 xff1f 大部分情况下你是可以安装的 xff0c 在本教程中我会详细介绍安装的步骤 在正式开始之前 xff0c 我来告诉你
  • 平衡小车PID学习

    离散式PID xff1a 位置环 xff1a 入口参数 xff1a 位置测量值 xff0c 编码器的位置测量值 系统的参数调定要求 xff1a 目标 xff1a 准确性 xff0c 稳定性 xff0c 快速性 指标 xff1a 最大超调量

随机推荐

  • arm64汇编篇-04堆与栈的关系

    栈 xff1a 栈是一种具有特殊的访问方式的存储空间 xff08 后进先出 xff0c Last In Out Firt xff0c LIFO xff09 堆 xff1a 堆用于动态分配和释放程序所使用的对象 xff08 这边不详细介绍堆
  • 关于STM32平衡小车的几个关键疑问

    引用文章 一 关于姿态融合 首先需要提一点关键的 xff0c 如果是采用卡尔曼滤波或者互补滤波 xff0c 尽可能把采样时间调小 xff0c 这样可以增加滤波的效果 建议采样时间不要高于10ms xff0c 起初我在测试的时候采样时间设置为
  • STM32F103C8T6系统板

    目录 组成1 电源部分2 复位3 晶振4 电源部分电源电路 防反接电源电路 电源芯片输入滤波电容的作用 xff1a 输出滤波电容的作用 xff1a 大电容和小电容并联的作用 xff1a 电源电路 MCU引脚部分等VCC3 3与VCC3 3M
  • PyTorch实现 | 车牌OCR识别,《PyTorch深度学习之目标检测》

    注 xff1a 本文选自中国水利水电出版社出版 PyTorch深度学习之目标检测 一书 xff0c 有改动 福利 xff01 免费寄送图书 xff01 xff01 公众号 机器学习与AI生成创作 后台回复 xff1a 168 即可参与免费寄
  • putty不能连接vultr服务器,提示network error:connection refused怎么解决

    部署服务器时第四个选项的第1个和第4个选中重新部署 如下图
  • 推荐一些IEDA,Eclipse十分好用的插件

    推荐一些IEDA xff0c Eclipse十分好用的插件 一 IDEA插件1 常用插件 xff1a 2 代码质量插件 xff1a 3 其他插件 xff1a 二 Eclipse 插件 xff1a 一 IDEA插件 1 常用插件 xff1a
  • VSCode git 配置心得

    一 Git是一个分布式的代码版本管理工具 类似的常用工具还有SVN CVS 最大的特点也是优点在于提供分布式的代码管理 1 分支代码只有一份 xff01 使用过svn的童鞋想必都知道 xff0c 当我们要开发一个新功能或者增加一个新版本或者
  • AD、PADS、Cadence哪个最好用?

    用哪个工具不是你说了算 案例1 xff1a 老板 xff0c Allegro我不会用啊 xff0c 我只会用Power PCB 好 xff0c 你去找财务结算工资吧 xff01 案例2 xff1a 小伙子 xff0c 你会用什么工具啊 xf
  • git 使用规则

    Linus为Linux Kernel Project发起的版本控制项目 HEAD代表当前最新状态 tag为某个状态的标签 SHA1为每个提交日志的唯一标识 install apt get install git core git clone
  • 两分钟教你学会用示波器测量串口波特率

    首先接好线 xff0c 黑表笔接地线 xff0c 灰表笔接串口TX数据线 接着打开示波器 xff0c 按下AUTO xff0c 自动测量波形 接着按下AUTO上面的STOP键 xff0c 冻结画面 按下CURSORS xff0c 打开光标模
  • Visual Studio 与Visual C++ 有什么区别

    Visual C 43 43 是 Visual Studio的一个部分 xff0c 此外还有 Visual Basic xff08 VB xff09 Visual C 等 VC 43 43 6 0 是VS6的 VC 43 43 2003 是
  • STM32Cube的串口设置(一)即学即用

    串口系列 STM32Cube的串口设置 xff08 一 xff09 即学即用 STM32Cube的串口设置 xff08 二 xff09 一个串口接收另一个串口发送 串口实战 STM32Cube的串口实战 xff08 一 xff09 GPS
  • C++中构造函数后面接单冒号是什么意思?

    构造函数后 xff0c 接单冒号表示初始化列表 具体形式为 对于class TEST xff0c 存在成员变量int a b c 那么 TEST int x int y a x b y c 0 的效果就是用括号内的值 xff0c 来初始化成
  • 训练神经网络中最基本的三个概念:Epoch, Batch, Iteration

    转载地址 xff1a https zhuanlan zhihu com p 29409502 原作者 xff1a Michael Yuan 作者主页 xff1a https www zhihu com people mikeyuan 今天让
  • 使用makefile编译freeRTOS

    freeRTOS的文件结构 FreeRTOS LabsFreeRTOS Plus 包含freeRTOS 43 的组件和demo项目FreeRTOS 包含内核和demo项目 Source目录 xff1a 三个必须文件list c queue
  • 2013 一路走过

    2013 一路走过 想起当初找工作的时候 xff0c 一个人早上坐火车跑到其他大学的招聘会上去逛一圈 xff0c 了解招聘情况 然后下午又坐火车回学校 记得那天我投了十几份简历出去 xff0c 本打算投着试试 xff0c 没想到回来后有几家
  • 编译vs2008的samples程序总是跳过

    编译vs2008的samples程序总是跳过 xff0c 要配置属性还显示 未能完成操作 未指定的错误 的解决办法 作者 admin 分类 开发问题 发布时间 2013 03 12 09 22 974 浏览数 6 没有评论 文章转自王牌软件
  • MFC 用户界面线程:界面线程的退出 窗口关闭的流程

    原文链接 xff1a http wenku baidu com link url 61 6CFkWbLOeFgNoUsJniCX3ksw6 RztxMr9Z e6t7uu3e vV7UTKThUEkyRkq8IXwxIw5qYctN8gIx
  • MFC用户界面多线程实例2

    以下是 MFC 用户界面线程相关知识 由于用户界面线程含有自己的消息循环 xff0c 可以出来 Windows 消息 xff0c 并可创建和管理诸如窗口和控件等用户界面 元素 因此 xff0c 这 种线程较工程线程更为复杂 创建用户界面线程
  • 反汇编定位代码崩溃位置_1

    原帖 xff1a http blog csdn net gwzz1228 article details 9045853 利用map xff0c cod文件定位崩溃代码行 利用vs2010 新建一个空的控制台项目 xff0c 添加文件gtg