1
我正在学习使用GDB为安全类导致缓冲区溢出。我有一个输入文件,成功地使一个程序通过写入缓冲区溢出跳转到未经授权的功能时,我给它输入这样的:有没有办法关闭gdb的缓冲区检查输入?
sh myFile.txt | ./myProgram
现在我要检查使用GDB的授权的功能。但是当我使用tty command or using <将myFile作为输入提供给GDB时,GDB只需要我的输入的中间20个字节填充20字节的缓冲区。看起来GDB正在“检查”输入的缓冲区大小。
- gdb在做什么?
- 如果是这样,是否有办法关闭它?
C代码如下所示:
char one[20];
char two[20];
printf("..."); fflush(stdout);
gets(one); //only takes 20 bytes from the middle of printf "morethan20bytes..." from input file
printf("..."); fflush(stdout);
gets(two); //only takes 20 bytes from the middle of printf "morethan20bytes..." from input file
你如何确定这种行为? – 2013-03-05 14:13:57
@OliCharlesworth我使用x命令检查缓冲区1和缓冲区2的比特级内容。然后我转换十六进制我看到ascii,并可以告诉,只是从中间输入20个字符。 – bernie2436 2013-03-05 14:24:09
内存内容可能已被覆盖,但由于GDB知道阵列大小,它只会显示该内容。您可以使用超出范围的索引来检查数组外部,或者转换为指针并添加偏移量。 – 2013-03-05 14:43:27