由于在公司自己写的代码交给测试时老是有那种我这边正常测试那边老是崩溃的情况。调试除了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