bufbomb 报错 ./stdio-common/vfprintf-internal.c: No such file or directory.

注意:此方法针对HUST特供 bufbomb 的 level2,其它情况不保证有效。

有同学可能发现,当跳入bang函数时,无论是gdb还是直接执行,都会出现以下报错
在这里插入图片描述
其实若是再仔细排查一下,会发现实际上只有跳到 <bang+0> 才会 printf 报错,跳到 <bang+1> 就可以了。那这又是为什么呢?
在这里插入图片描述
这种情况我怀疑是因为进入 printf 函数后,system 会检查每个栈帧的返回地址是否有效,所以当跳到 <bang+0> 时,第一次push的 %rbp 被当作了返回地址,在检查时自然报错了。

所以解决办法也很简单,只要我们在攻击指令中手动 push 一个合法的返回地址,比如 test() 函数中 call getbuf 的下一句即可。一个合法的输入如下:

在这里插入图片描述

上一篇:C++-基础