我想知道是否可以创建一个脚本,根据内存地址值一步一步地继续执行程序(在中断后)。因此,如果我正在跟踪一个函数,并且它进入了高内存值,我会调用gdb脚本,直到内存值低于设定值,然后它会再次中断。
我是gdb的新手,仍在阅读手册/教程,但我想知道我的目标是否可能:)-如果你能把我推向正确的方向,甚至更好;)
谢谢!
编辑,使用伪代码更新:
while (1) {
cma = getMemoryAddressForCurrentInstruction();
if (cma > 0xdeadbeef) {
stepi;
} else {
break;
}
}
您谈论的是程序计数器(有时称为指令指针)。它在gdb中可用作$pc
。您的伪代码可以翻译成这个实际的gdb命令:
while $pc <= 0xdeadbeef
stepi
它会很慢,因为它会为每个指令启动和停止程序,但据我所知,如果你不知道你要找的确切地址,就没有快速的方法。如果你这样做了,那么你可以在那里设置一个断点:
break *0xf0abcdef
cont
将运行,直到程序计数器达到0xf0abcdef