本文共 627 字,大约阅读时间需要 2 分钟。
由于在公司自己写的代码交给测试时老是有那种我这边正常测试那边老是崩溃的情况。调试除了windbg OD等其时还可以简单定位崩溃点。这是在自己搞linux时产生的想法。linux有非常强大的调试机制。
原理是源码编译时会生成汇编代码与机器码。同时有对应的地址行号等等。开始操作。环境vs2015写段空指针代码。#include "stdafx.h"int main(int argc, _TCHAR* argv[]){ char* ptr = NULL; *ptr = 'A'; return 0;}
运行发生崩溃
设置属性 去掉随机基址再次运行时记下地址0x0000000140001437
生成机器码文件 汇编文件 map文件产生机器码文件 汇编文件文件:属性-c/c++-输出文件-汇编程序输出:程序集、机器码和源代码 (/FAcs) 可以直接选FAcs 一次全生成这种是没有偏移的产生Map文件:属性-连接器-调试-生成映射文件:是 (/MAP)map我的生成在这打开map崩溃地址 0x0000000140001437而 0001:00000400 main 0000000140001400 f testbug.obj 因此在testbug.obj 里面计算偏移为37找对应的汇编文件 .cod文件找到偏移处转载于:https://blog.51cto.com/haidragon/2348558