如何将gdb观察点设置为存储在寄存器中的值?

Hi-*_*gel 3 stack-overflow debugging gdb breakpoints buffer-overflow

我正在尝试检测某些函数中的堆栈溢出,并希望将观察点设置为RSP寄存器指向的内存.我不能只将一个观察点设置到某个地址,因为可以从不同的地方调用该函数.所以我想在函数的开始和结束时设置断点,并强制它们启用/禁用观察点.

但是设置观察点的方式都不适合我.例如,wa $rsp观看登记册; 该

set $myvar = $rsp
wa $myvar
Run Code Online (Sandbox Code Playgroud)

使观察点跟踪... $ myvar的变化!不是它存储的价值!

很奇怪,我敢肯定,这应该是一种方式,但我不知道一个......

UPD:看起来我在gdb中发现了一个bug.二:

(gdb) wa *$rsp
Attempt to dereference a generic pointer.
(gdb) set $myvar = $rsp
(gdb) wa *$myvar
Attempt to dereference a generic pointer.
Run Code Online (Sandbox Code Playgroud)

UPD:不知道为什么,但wa &*$myvar设置了$ myvar的断点,但不应该.错误?

Mar*_*ick 7

gdb不会让你明确地解除引用(void*)指针等$rsp.它不知道指向值的大小或格式.

watch *(char *)$rspwatch *(int *)$rsp等等.