debugging 如何在GDB中检查兰德()返回的值

368yc8dk  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(120)

所以我正在GDB中调试我的随机游戏,以打破如何轻松猜数字。我在代码中引用的行是:winning_number= (rand() % 20) + 1在我分解函数后,它看起来像这样:

的数据
所以红色下划线是一条指令,我认为它将值存储在EAX寄存器中。如何检查它的值来查找兰德()函数返回的数字?我需要(gdb)指令集。

nvbavucw

nvbavucw1#

C中的rand返回%eax中的int。您可以使用print $eax命令在GDB中查看其值。参见GDB手册的Examining Data部分。
该值仅在对rand的调用完成后且在执行mov $0x66666667,%eax指令之前有效,因此您可能希望使用stepinexti命令单步执行程序,或者在地址*0x08049019处设置断点。
红色下划线的是一条指令,我认为它将值存储在EAX寄存器中
mov %eax,%ecx将保存在%eax中的值复制到%ecx。

c90pui9n

c90pui9n2#

我解决了这个问题:
我是这样分解的。我发现整个指令winning_number=(rand() %20) + 1被反汇编成这样:

的数据
在底部行中,在EAX寄存器中有一个输出就绪,并且它被移动到winning_number值的地址(红色下划线)。根据建议,我在地址 *0x804903b处添加了一个断点。

相关问题