基于内存地址的Gdb条件步骤?
我想知道是否有可能创建一个脚本,根据内存地址值一步一步地(在中断后)继续执行程序。 因此,如果我正在跟踪一个函数,它进入了一个高内存值,我会调用gdb脚本,直到内存值低于一个设定值——然后它会再次中断 我对gdb很陌生,还在阅读手册/教程,但我想知道我的目标是否可行:)-如果你能让我找到正确的方向,那就更好了;) 谢谢 编辑,使用伪代码更新:基于内存地址的Gdb条件步骤?,gdb,Gdb,我想知道是否有可能创建一个脚本,根据内存地址值一步一步地(在中断后)继续执行程序。 因此,如果我正在跟踪一个函数,它进入了一个高内存值,我会调用gdb脚本,直到内存值低于一个设定值——然后它会再次中断 我对gdb很陌生,还在阅读手册/教程,但我想知道我的目标是否可行:)-如果你能让我找到正确的方向,那就更好了;) 谢谢 编辑,使用伪代码更新: while (1) { cma = getMemoryAddressForCurrentInstruction(); if (cma &g
while (1) {
cma = getMemoryAddressForCurrentInstruction();
if (cma > 0xdeadbeef) {
stepi;
} else {
break;
}
}
您正在谈论的是(有时称为指令指针)。它在gdb中作为$pc
提供。您的伪代码可以转换为实际的gdb命令:
while $pc <= 0xdeadbeef
stepi
将一直运行,直到程序计数器点击0xf0abcdef(有时称为指令指针)。它在gdb中作为$pc
提供。您的伪代码可以转换为实际的gdb命令:
while $pc <= 0xdeadbeef
stepi
将一直运行,直到程序计数器达到0xf0abcdef“内存地址值”是模糊的,但我认为您正在寻找一个观察点<代码>监视*(int*)0x12345678例如,监视地址0x12345678处的int。然后你就可以
cont
这个程序,它会一直运行,直到那个值改变为止。@AlanCurry:我用伪代码更新了这个问题,我想“内存地址值”是模糊的,但我想你在寻找一个观察点<代码>监视*(int*)0x12345678例如,监视地址0x12345678处的int。然后你就可以cont
这个程序,它会一直运行,直到那个值改变为止。@AlanCurry:我用伪代码更新了这个问题,说明了我想实现什么