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