如何使用GDB查看rand()函数的返回值?
在GDB中获取rand()返回值的方法
针对你调试的随机数猜谜游戏,要拿到rand()的返回值(该值会存在EAX寄存器中),可以按以下步骤用GDB操作:
先定位到你标注红色下划线的那条指令(也就是
rand()调用后负责把EAX值存入内存的mov指令),用它的内存地址设置断点:break *0x<指令地址>把
<指令地址>替换成反汇编结果里这条指令对应的实际地址即可。运行程序,让它停在刚才设置的断点处:
run程序断下后,用以下任意一条指令查看EAX寄存器的值:
info registers eax # 显示EAX的完整寄存器信息 print $eax # 以十进制格式打印EAX的值 p/x $eax # 以十六进制格式打印EAX的值(按需使用)
还有一种替代方法:在反汇编结果里的call rand指令处设断点,运行到此处后执行stepi单步完成rand()调用,此时EAX中就已经存好返回值,再用上面的指令查看即可。
拿到rand()返回值后,根据代码winning_number= (rand() % 20) + 1简单计算,就能直接得到中奖数字。
内容的提问来源于stack exchange,提问作者Korneliusz93
相关产品推荐
相关产品推荐

