当特定模块地址空间被覆盖时,我需要设置断点吗?我需要通过模块名称而不是地址空间来指定它
Windbg 断点
逆向工程
风袋
勾搭
2021-06-26 21:59:52
1个回答
我无法理解你的用例是什么假设你有一些这样的代码正在运行并且你想在一些东西被写入一些你可以使用的空间时中断(硬件辅助断点)
演示代码在 0x2000 字节的空间中随机写入 @ 符号
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char randritebuff[0x2000];
int main (void) {
srand( (unsigned int)time(nullptr));
for(;;) {
int writeaddr = ((rand() % 0x1fff)+1);
randritebuff[writeaddr] = 0x40;
}
}
假设您有兴趣仅在
从缓冲区开始的第 1337个字节写入时查看
如果它们在windbg中可用,您可以使用带有模块名称和缓冲区符号的断点
00eb102e c682d198ef0040 mov byte ptr randrite!randritebuff+0x1 (00ef98d1)[edx],40h ds:0023:00efacd9=00
0:000> ba w1 randrite!randritebuff+0x1337 <<<<<<<<<<<<<<<<<<<<<<
0:000> bl
0 e Disable Clear 00efac07 w 1 0001 (0001) 0:**** randrite!randritebuff+0x1337
0:000> ? randrite!randritebuff
Evaluate expression: 15702224 = 00ef98d0
0:000> ? 00ef98d0+1337
Evaluate expression: 15707143 = 00efac07
0:000> g
Breakpoint 0 hit
eax=00000003 ebx=7ffdf000 ecx=00007333 edx=00001336 <<
a hardware breakpoint break with eip @ + 1 (00eb102e + sizeof(c682d198ef0040))
00eb1035 << ebef jmp randrite!main+0x16 (00eb1026)
其它你可能感兴趣的问题
