CSAPP的缓存溢出实验

新手上路,请多包涵

在做CSAPP的里面的缓存溢出实验。用的是华盛顿大学的软硬件接口那节课提供的虚拟机和实验。做到Level2做不出来了。Level2是要通过一个没有边界检查的Gets函数【这个函数用来输入一个字符串】修改返回地址和在栈里面写机器码改变一个全局变量global_value的值,然后再跳到bang()这个函数。
我把函数的返回地址改到了原先的栈里面,但是一运行立马报段错误,写进去的机器码没法运行没法修改global_value的值
这是getbuf函数的部分汇编代码
clipboard.png
然后运行到这里的时候寄存器的情况是这样的

clipboard.png
试出来会在7fffffffb810这个地址开始写入字符串。然后我写的机器码是这样的
c705082360005237b143c70504236000ea5e91046820104000c36677889900112175133ba4ee1599001122334455667770b8ffffff7f000010b8ffffff7f0000
输入48个字符之后输入8个把rbp的值覆盖掉再输入10b8ffffff7f0000把返回值改到原先的栈里面让程序去运行我写进去的机器码。但是运行的时候就出现
clipboard.png
运行不出来。

跪求大神帮忙,实在不知道是怎么回事了。

阅读 2.9k
1 个回答
新手上路,请多包涵

你编译的时候,给gcc加上-fno-stack-protector命令行选项试试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进