利用汇编与机器码定位崩溃点

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值