首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

硬件断点跟内存断点有什么区别啊

2013-01-04 
硬件断点和内存断点有什么区别啊??试着脱UPX壳,用ESP原理,在PUSHAD后栈中设置内存断点,结果跳到一条指令发

硬件断点和内存断点有什么区别啊??
试着脱UPX壳,用ESP原理,在PUSHAD后栈中设置内存断点,结果跳到一条指令发生内存访问错误。
但用硬件断点后,能直接去到OEP处。
到底硬件断点和内存断点有什么差别?不都是在那地址被访问时断下来吗?只是硬件断点用到调试寄存器,没有什么特别了吧~?
[解决办法]
硬件断点嘛,硬件肯定很硬嘛,软件打不过硬件,自然服服帖帖的
[解决办法]

引用:
实然想到会不会是内存断点只是修改了代码成INT3,UPX进行了校验什么的进行反调试,会不会是这样呢?而硬件断点没有修改代码!


与 int 3 无关

由于硬件断点只有4个,不够用

内存断点试图做到硬件断点的功能(且不说速度慢),但由于内存属性只能精确到页,一般是4K,所以常常定位不精确,好处是内存断点的个数无限制
[解决办法]
引用:
补充一下

硬件断点是利用调试寄存器
而内存断点只是把指定内存所在的内存页的属性改掉,这样该地址被访问到的时候就知道了


至少VS, GDB是用的 INT 3, 不知道什么调试器会用页表属性, 那个在性能上无法接受...

用过程序简单测试下( VS 编译不能开 /ZI , 链接不能开  /incrementa ) :
#include <stdio.h>

__declspec(naked) int __fastcall foobar(int a,int b)
{
__asm lea eax, [ecx+edx];
__asm ret;
}

int main()
{
unsigned char* p = (unsigned char*)foobar;
printf( "%02X %02X %02X %02X\n" , p[0], p[1], p[2], p[3] );
getchar();
return 0;
}

在 ret 上设置一个断点, 结果是 8D 04 11 CC


热点排行