Debugging 有没有办法监视GDB中所有寄存器的特定值?
我正在逆向工程一个在GDB中没有调试符号的c程序。它要求提供一个具体的1-15位pin码,并告诉您是否正确。我的目标是找出这个pin码是什么 我很难找到我的pin码猜测与正确的pin码进行比较的位置。我认为有一种方法会有所帮助,那就是找到我的猜测被载入寄存器的任何地方 那么,关于我的问题,是否可以检查并查看特定值是否加载到任何寄存器中Debugging 有没有办法监视GDB中所有寄存器的特定值?,debugging,gdb,reverse-engineering,Debugging,Gdb,Reverse Engineering,我正在逆向工程一个在GDB中没有调试符号的c程序。它要求提供一个具体的1-15位pin码,并告诉您是否正确。我的目标是找出这个pin码是什么 我很难找到我的pin码猜测与正确的pin码进行比较的位置。我认为有一种方法会有所帮助,那就是找到我的猜测被载入寄存器的任何地方 那么,关于我的问题,是否可以检查并查看特定值是否加载到任何寄存器中 例如,我可以使用watch$rax==1234对单个寄存器执行此操作,但我希望对每个寄存器执行此操作。GDB没有此功能 这听起来像是一个糟糕的方法,因为如果数字是
例如,我可以使用
watch$rax==1234
对单个寄存器执行此操作,但我希望对每个寄存器执行此操作。GDB没有此功能
这听起来像是一个糟糕的方法,因为如果数字是0-9之间的数字,你会得到很多误报,你甚至不能确定它们是如何表示的
更简单的方法应该是查找与pin输入或失败密切相关的更改,并从中跟踪数据:
- 如果输入错误的pin时有控制台输出,请在二进制文件中查找此字符串并找到引用它的位置
- 如果这是一个控制台应用程序,请查找对scanf/printf的引用
- 如果不使用scanf(例如外部键盘),您可以使用scanmem之类的工具查找输入的位数