简单C语言模式实现OD调试断点设置

本文介绍了编程调试的重要性和使用Visual C++ (VC)进行断点调试的方法,包括F5/F11/F10快捷键的使用以及如何在源代码中设置`__asm int 3`断点。此外,还讲解了在没有源代码的情况下,如何通过修改程序的机器码(例如将`CC`插入到目标位置)来设置断点,并利用外部程序来获取调试信息,从而实现类似OD调试的效果。

本篇要说的调试原理以及3种断点的设置

    不懂调试不能说你懂了编程,不会设置断点就说明你不懂,一个程序只有不断地DEBUG才能达到它所能达到得完美,正像一个人必须得禁得起无数人,无数失败的DEBUG才能走向它的成熟。人是通过无数次失败和无数人指正他的失误和缺点来DEBUG,那一个可能有很多BUG漏洞的程序是通过怎样的方式来把BUG DElETE掉的呢?
    会用VC的人都知道,当你拿到一个程序,按F5运行发现运行的结果与你想得到的结果不同的时候,你就会按F11或者F10进入单步调试模式,或者在你认为可能出现了错误的那一行按F9设置一个断点,在离它不远的地方再设一个断点,按F5运行,程序就会在它运行的地方停止,你通过按F11或者F10进行单步运行,观察下面的表里面的变量情况就可以推算出哪行大概出错,然后修改程序,至于单步调试F11和F10的区别你多试试就知道了,如果对于源代码调试还找不到错误的话,那就按ALT 8进入反汇编区,继续单步调试,找出BUG。
    以上就是你拿着C的源代码进行调试的过程,但是你如果没有源代码怎么调试了?或者VC是怎么进行调试的呢,怎么设置断点的呢?OD的基本思路又是怎么写成的呢?

这里介绍一种断点设置断点的方法,大家可以通过C编程实现:
Int 3断点,或者说中断断点:
大家可以试一试用VC写这样一个程序
int main(int arg,char * agrv[])
{
      __asm int 3
      return 0;
}
    看看有什么效果,或者把__asm int 3加入到你写的某个程序的某行,按F5运行,看看有什么反应,可以告诉大家这个程序运行到__asm int 3这行停了下来(有的版本可能报错),这个就跟你在这行按F9一样,注意一点:这个asm前面是两个__而不是一个_!!!

    这个指令是表示在你的程序里加入汇编码的意思,你可以__asm{}在这个括号里加入汇编码,这个int 3就是汇编里面的断点,它对应的机器码是十六进制的CC,你可以用C32asm的十六进制模式下打开一个应用程序,在它的代码区把某个数据改成CC,这样你就可以在这个应用程序里设置一个断点,保存然后运行就会发现,程序运行到某个部分终止,就是你改成CC的位置,你可以通过编程,先记下某个程序某位置的数据,然后把它改成CC,在你编的程序里调用运行你要调试的程序,它就会运行到你修改的位置终止,然后你通过你编程的记录这个调试程序在这个断点处的信息。

    记下以后,把CC又修改为原来的值,这样就实现了调试,这就是OD,VC调试实现的基本原理,设置断点,读取断点处程序的信息,记住C里面的__asm int 3命令,或者CC这个十六进制机器指令,把它们经常写在你的程序里会很有试试,特别是记住CC这个机器码,是不是很好记啊,慢慢积少成多,或许有一天你也能拿这些机器码,直接用记事本写程序了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值