3、实例三
代码如下:
这个不同于之前的两个程序,输出的数据是用户输入的,更贴近实际。
运行一下这个程序
进入gdb
跑一下程序再下断点
我们在fget函数处下断点n,之后会输入,我这里输入的是pilot %x %x %x ?
我们可以看到已经在栈里了
之后我们看到了je 的跳转,来看一下标志位
补充:gdb如何修改标志位的值
我们一直单步,直到输出
那么为什么会是这样子的输出呢
当有%号时,默认是格式化字符串的输出,所以从下面的栈中取值,依次是0x64,f7fb0580和56556228,最后的?没有%所以说还是原样输出。
总结:
程序想要把栈数据泄露,我们可以用printf和格式化字符串的漏洞。