1

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

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

谢谢!

编辑,用伪代码更新:

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

1 回答 1

1

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

while $pc <= 0xdeadbeef
    stepi

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

break *0xf0abcdef
cont

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

于 2012-09-05T23:22:12.787 回答