int3和断点

除了int 0x80外用户空间还可以通过int3——向量3、into——向量4 、bound——向量5等异常指令进入内核,而其他异常无法被用户空间程序利用,都是由系统使用的。

linux用户态的int3进入内核后,内核是通过SIGTRAP信号发送给用户进程的。用户进程要注册SIGTRAP信号的handler来响应。(这应该就是gdb之类下断点的原理)

传统的TF,int3应该足以支持单步调试和断点调试。

486上又新增了断点地址寄存器,他们的内存“断点”功能是之前做不到的。

原文地址:https://www.cnblogs.com/xiang-yin/p/12147193.html

时间: 2024-08-30 12:08:46

int3和断点的相关文章

检测INT3 软断点

“INT3”断点指令的机器码是 “0xcch” 检测思路,取函数地址,判断第一个字节是不是 “CCh” BYTE bFirst = 0; ProcAddres = GetProcAddress(LoadLibrary("user32.dll","MessageBox")); bFirst = *((BYTE*)ProcAddress); if(bFirst == 0xCC) { return TRUE; }

断点之软件断点的一些基本知识(INT3)

软件断点:断点异常(INT 3) 属于陷阱类异常,当CPU 产生异常时候,其程序指针是指向导致异常的下一条指令,但是我们观察到的是却指向当前的导致异常的这条指令(想计算机组成原理的实验 IP)原因:在中断到调试器的时候,会把所有断点位置恢复成原先的指令,再交给用户也就是DEC ebx 2.当我们设置断点的时候,调试器会把这里的本来指令的第一个字节保存起来 然后写入INT3指令,因为INT3为0xCC(11001100)一个字节,所以设置和取消断点时候也只需要保存和恢复一个字节.VC6把断点的设置

认识OD的两种断点

OllyDBG从原理上来区分,有两种不同的断点:软件断点和硬件断点. 也许会有朋友说那不是还有内存断点吗? 内存断点严格来说是属于一种特殊的软件断点. 内存断点: 内存断点每次只能设置一个,假如你设置了另一个内存断点,则上一个会被自动删除. 设置一个内存断点,会改变整块(4KB)内存的属性,哪怕你只设置一个字节的内存断点. 另外还需要提一下的是,内存断点会明显降低OD的性能,因为OD经常会校对内存. 软件断点: 当我们按下F2设置的断点就是软件断点. 设置该断点的原理是在断点处重写代码,插入一个

断点 技术相关

继续研究一下OD实现部分中 断点相关的技术: 1.普通断点: 1.1 OD的处理方法是将指令的第一个字节替换成CC,造成中断.为什么可以?(因为它属于int3中断  的代码) 这个INT 3指令,其机器码是CCh,也常称为CC指令.当被调试进程执行INT 3指令导致一个异常时,调试器就会捕捉这个异常从而停在断点处,然后将断点处的指令恢复成原来指令.当然,如果自己写调试器,也可用其他一些指令代替INT 3来触发异常. 用INT 3断点的好处是可以设置无数个断点,缺点是改变了原程序指令,容易被软件检

Visual Studio调试之断点基础篇

原文链接地址:http://www.cnblogs.com/killmyday/archive/2009/09/26/1574311.html 我曾经问过很多人,你一般是怎么调试你的程序的? F9, F5, F11, F-- 有很多书和文章都是介绍怎么使用Visual Studio编写WinForm啦,.ASP.NET之类的程序:知道如何编写固然重要,但是我觉得程序员可能只会花费30%的时间在编写代码上,剩下的大部分时间都是在调试程序.在网上看到很多人介绍Windbg的用法,但是没有看到几篇讲解

如何对抗硬件断点--- 调试寄存器

1.前言 在我跨入ollydbg的门的时候,就对ollydbg里面的各种断点充满了疑问,以前我总是不明白普通断点,内存断点,硬件断点有什么区别,他们为什么 有些时候不能混用,他们的原理是什么,在学习了前辈们的文章以后,终于明白了一些东西.希望这篇文章能让你对硬件断点的原理和使用有一些帮助 2.正文-------------------------------------------------- i.硬件断点的原理 在寄存器中,有这么一些寄存器,它们用于调试.人们把他们称为调试寄存器,调试寄存器

Windbg对过滤驱动DriverEntry函数下断点技巧

方法1: 1> 先用DeviceTree.exe查看指定的过滤驱动的Load Address(加载地址) 2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址 3> 计算过滤驱动的DriverEntry函数内存地址 DriverEntry函数内存地址 = Load Address + 入口点地址 例子: 1> Load Address = 0xFAABF000 2> 入口地址 = 0x3400 3> Windbg下断点 bu 0xFAABF000+0x3400

烫烫烫”——调试基础断点篇

很多人都应该见过“烫烫烫”这个神一般存在的字符串,一旦“烫烫烫”出现的时候,就说明你玩坏了——指针越界,访问到了非法内存. 那么为啥是“烫烫烫”,跟断点有啥关系? INT 3 我们在用VC进行调试时,常常会观察到一块刚分配的内存或字符串被填满了“CC”,而0xCCCC正好是“烫”这个汉字的GB2312编码.另外很巧的是 0xCC又正好是INT3指令的机器码.这显然不是什么巧合,而是我们的编译器故意这么做的.至于原因,先看INT3这条指令是干嘛的? x86架构下提供了一条专门用来支持调试的指令,即

[Win32]一个调试器的实现(七)断点

[Win32]一个调试器的实现(七)断点 作者:Zplutor 出处:http://www.cnblogs.com/zplutor/ 本文版权归作者和博客园共有,欢迎转载.但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利. 断点是最基本和最重要的调试技术之一,本文讲解了如何在调试器中实现断点功能. 什么是断点 在进行调试的时候,只有被调试进程暂停执行时调试器才可以对它执行操作,例如观察内存内容等.如果被调试进程不停下来的话,调试器是什么也做不了的.要使