OD调试器断点——内存断点

在这里插入图片描述我们选择Whole line拷贝整行,Whole Table可以拷贝整个列表的断点信息。

Breakpoints, item 0
 Address=00401018
 Module=CRACKME
 Active=Always
 Disassembly=OR EAX,EAX

拷贝下来的信息显示了断点的地址,对应的指令以及激活状态。

程序中断在断点处会在状态栏显示暂停状态。

在这里插入图片描述

暂停的原因如下:
在这里插入图片描述
接下来我们来了解一下当设置一个断点以后,OD调试器在底层二进制代码是如何将程序中断的,会发生什么变化。
单击鼠标右键选择-Follow in Dump-Selection
在这里插入图片描述

我们看看数据窗口中401018地址处的内容:

在这里插入图片描述

我们初看一下数据窗口中的内容和反汇编代码中代码是一样的:
在这里插入图片描述

数据窗口和反汇编代码中我们看到的都是0B C0,对应的是OR EAX,EAX。似乎代码没有什么变化,但是真的没有变化吗?

我们保留401018处的断点,重新加载CrackMe。
在这里插入图片描述

我们将OR EAX,EAX对应的机器代码读取出来然后写到别处。
在这里插入图片描述

该指令将401018地址处的双字值保存到EAX中,我们看看OD的提示框中提示的信息。
在这里插入图片描述

在数据窗口中和提示框中显示的都是相同的内容:0B C0。但是,我们按下F7键看看EAX显示的内容。
在这里插入图片描述

读出来的401018处的内容并不是OD刚刚显示的0B C0 74 01(小端存储),按双字取出来是0174C00B,而现在显示的是0174C0CC,因此401018处字节值是CC。当我们设置断点后,OD会将对应指令处第一个字节指令替换成CC。但是为了不影响界面显示效果,OD会将CC显示为原字节。但是,我们可以在内存单元中读取出其真实的内容,并且可以在反调试中用此方法来检测断点。所以,我们设置的断点有时候莫名其妙的消失了不要感到奇怪,或许说这是调试器的本身的弱点吧。

除了F2设置断点以外,我们还可以通过命令栏来设置断点,如下:

BP 401018

在这里插入图片描述

在NT(2000,XP和2003)系统中我们也可以很容易的给API函数设置断点-我们前面章节中已经介绍过了。要给MessageBoxA设置断点,请输入:
在这里插入图片描述

并且你必须指定API函数的确切名称,而且大小写敏感。
在这里插入图片描述

还有一个比BP更加强大的命令BPX可以给引用或者调用了指定API函数的指令都下断点。

下面是BPX给MessageBoxA设置的断点列表。正如你所看到的,OD找到了3处地方调用MessageBoxA,并设置了3个断点。
在这里插入图片描述

还有一种设置断点的方法:在反汇编窗口中你想设置断点的那一行双击机器码即可。如果想删除的话,再双击一次即可。
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您在 Visual Studio 2022 中调试 DLL 时发现断点无法进入,请确保您已经进行了以下步骤: 1. 确保 DLL 项目已经以调试模式进行构建。在解决方案资源管理器中,右键单击 DLL 项目,选择 "属性"。在属性页中,选择 "配置属性" -> "常规",确保 "配置类型" 设置为 "动态库(.dll)",并且 "调试信息格式" 设置为 "调试"。 2. 确保您的应用程序正确加载了 DLL。在 Visual Studio 中,您可以通过在 "调试" 菜单中选择 "附加到进程" 来手动附加到正在运行的应用程序。选择您的应用程序进程,并点击 "附加" 按钮。 3. 确保您设置了正确的断点。在 DLL 项目的代码中,单击行号旁边空白处设置断点。确保您设置的断点是在实际会执行的代码行上。 4. 如果您的 DLL 是由另一个应用程序加载的,而不是直接运行的,那么请确保您在正确的环境下进行调试。有些应用程序可能会以不同的用户权限或沙盒环境运行,这可能会导致断点无法进入。您可以尝试以管理员权限运行 Visual Studio 或目标应用程序,或者将目标应用程序的启动路径设置为可访问的路径。 5. 确保您的代码没有被优化。在 Visual Studio 中,您可以在 DLL 项目的属性页中的 "配置属性" -> "C/C++" -> "优化" 下,将 "优化" 选项设置为 "无(/Od)",以确保代码没有被优化,从而使断点能够进入。 如果您仍然遇到断点无法进入的问题,建议检查您的代码和项目配置是否正确,并尝试重启 Visual Studio 和目标应用程序。有时候,重新构建项目和清理解决方案也有助于解决此类问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值