Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 如何将gdb监视点设置为存储在寄存器中的值?_Debugging_Gdb_Stack Overflow_Breakpoints_Buffer Overflow - Fatal编程技术网

Debugging 如何将gdb监视点设置为存储在寄存器中的值?

Debugging 如何将gdb监视点设置为存储在寄存器中的值?,debugging,gdb,stack-overflow,breakpoints,buffer-overflow,Debugging,Gdb,Stack Overflow,Breakpoints,Buffer Overflow,我试图在某个函数中检测堆栈溢出,并希望将观察点设置为RSP寄存器指向的内存。我不能只将观察点设置为某个地址,因为函数可以从不同的位置调用。因此,我想在函数的开始和结束处设置断点,并强制它们启用/禁用监视点 但这两种设置观察点的方法对我都不起作用。例如,wa$rsp监视寄存器; set $myvar = $rsp wa $myvar 使监视点跟踪。。。$myvar的更改!不是它存储的价值 奇怪,我确定,这应该是一个方法,但我不知道一个 UPD:看起来我在gdb中发现了一个bug。二: (gdb)

我试图在某个函数中检测堆栈溢出,并希望将观察点设置为RSP寄存器指向的内存。我不能只将观察点设置为某个地址,因为函数可以从不同的位置调用。因此,我想在函数的开始和结束处设置断点,并强制它们启用/禁用监视点

但这两种设置观察点的方法对我都不起作用。例如,
wa$rsp
监视寄存器;

set $myvar = $rsp
wa $myvar
使监视点跟踪。。。$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.

UPD:不知道为什么,但是
wa&*$myvar
设置了$myvar的断点,尽管不应该设置。Bug?

gdb
不允许显式取消引用(void*)指针,例如
$rsp
。它不知道指向的值的大小或格式


watch*(char*)$rsp
watch*(int*)$rsp
等等。这太棒了!非常感谢,这很有效!