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)

下面的截图 在此处输入图片说明