有没有办法在GDB中查看特定值的所有寄存器?

时间:2016-02-12 03:41:08

标签: debugging gdb reverse-engineering

我正在逆向设计一个在GDB中没有调试符号的c程序。它要求一个特定的1-15位数的引脚号,并告诉你它是否正确。我的目标是找出这个密码是什么。

我很难找到我的引脚编号猜测与正确的引脚编号进行比较的地方。我认为有一种方法可以帮助找到我的猜测被加载到寄存器中的任何地方。

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

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

1 个答案:

答案 0 :(得分:1)

GDB没有此功能。

这听起来很糟糕,因为如果数字是0-9的数字,你会得到很多误报,你甚至无法确定它们是如何表示的。

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

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