Debugging 有没有办法监视GDB中所有寄存器的特定值?

Debugging 有没有办法监视GDB中所有寄存器的特定值?,debugging,gdb,reverse-engineering,Debugging,Gdb,Reverse Engineering,我正在逆向工程一个在GDB中没有调试符号的c程序。它要求提供一个具体的1-15位pin码,并告诉您是否正确。我的目标是找出这个pin码是什么 我很难找到我的pin码猜测与正确的pin码进行比较的位置。我认为有一种方法会有所帮助,那就是找到我的猜测被载入寄存器的任何地方 那么,关于我的问题,是否可以检查并查看特定值是否加载到任何寄存器中 例如,我可以使用watch$rax==1234对单个寄存器执行此操作,但我希望对每个寄存器执行此操作。GDB没有此功能 这听起来像是一个糟糕的方法,因为如果数字是

我正在逆向工程一个在GDB中没有调试符号的c程序。它要求提供一个具体的1-15位pin码,并告诉您是否正确。我的目标是找出这个pin码是什么

我很难找到我的pin码猜测与正确的pin码进行比较的位置。我认为有一种方法会有所帮助,那就是找到我的猜测被载入寄存器的任何地方

那么,关于我的问题,是否可以检查并查看特定值是否加载到任何寄存器中


例如,我可以使用
watch$rax==1234
对单个寄存器执行此操作,但我希望对每个寄存器执行此操作。

GDB没有此功能

这听起来像是一个糟糕的方法,因为如果数字是0-9之间的数字,你会得到很多误报,你甚至不能确定它们是如何表示的

更简单的方法应该是查找与pin输入或失败密切相关的更改,并从中跟踪数据:

  • 如果输入错误的pin时有控制台输出,请在二进制文件中查找此字符串并找到引用它的位置
  • 如果这是一个控制台应用程序,请查找对scanf/printf的引用
  • 如果不使用scanf(例如外部键盘),您可以使用scanmem之类的工具查找输入的位数

我认为没有一种方法可以一次检查所有通用寄存器中的特定值,但您可以将$rax==1234 | | |$rbx==1234 | | rcx==1234 | | rdx==1234……感谢您的回复。我最终找到了正确的密码。我很难找到我的猜测与正确的pin进行比较的地方。我发现检查寄存器无论如何都不会起作用,因为它们一次加载到寄存器中1个数字(每个数字由它的ASCII十进制值表示)。我最后找到了解决方案,关闭了compare语句,检查这些寄存器中的值是什么,以及它们如何随着不同的猜测而变化。