基于内存地址的Gdb条件步长



我想知道是否可以创建一个脚本,根据内存地址值一步一步地继续执行程序(在中断后)。因此,如果我正在跟踪一个函数,并且它进入了高内存值,我会调用gdb脚本,直到内存值低于设定值,然后它会再次中断。

我是gdb的新手,仍在阅读手册/教程,但我想知道我的目标是否可能:)-如果你能把我推向正确的方向,甚至更好;)

谢谢!

编辑,使用伪代码更新:

while (1) {
    cma = getMemoryAddressForCurrentInstruction();
    if (cma > 0xdeadbeef) {
        stepi;
    } else {
        break;
    }
}

您谈论的是程序计数器(有时称为指令指针)。它在gdb中可用作$pc。您的伪代码可以翻译成这个实际的gdb命令:

while $pc <= 0xdeadbeef
    stepi

它会很慢,因为它会为每个指令启动和停止程序,但据我所知,如果你不知道你要找的确切地址,就没有快速的方法。如果你这样做了,那么你可以在那里设置一个断点:

break *0xf0abcdef
cont

将运行,直到程序计数器达到0xf0abcdef

最新更新