Gdb条件步骤基于内存地址?

时间:2012-09-05 19:32:35

标签: gdb

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

我对gdb很新,还在阅读手册/教程,但我想知道我的目标是否可行:) - 如果你能让我找到正确的方向,那就更好了;)

谢谢!

编辑,使用伪代码更新:

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

1 个答案:

答案 0 :(得分:1)

你在谈论Program Counter(有时称为指令指针)。它在gdb中以$pc的形式提供。您的伪代码可以转换为这个实际的gdb命令:

while $pc <= 0xdeadbeef
    stepi

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

break *0xf0abcdef
cont

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