所以我们有一个实验室,我们需要在程序上执行缓冲区溢出。我已经发现GCC有缓冲区溢出保护,我发现在编译它时,你必须使用-fno-stack-protector标志禁用它。在我过去之后,我使用gdb反汇编代码,发现我想将程序重定向到地址0x4005b1。
但是当我输入用户输入时,如何在ASCII中输入b1的十六进制值?
当程序提示用户输入时,有一种方法可以转义b1值。类似的东西: aaaaaaaaaaaaaaaaaaaaaaaaaaa @ ^ E \ xb1。通常,当我刚编译程序时,地址将开始接近0x040000,但是当我使用-fno-stack-protector时会在更晚的地址启动,这就是为什么我需要将返回地址重定向到0x4005b1。如果没有办法输入b1,有什么方法可以解决这个问题?我可以以某种方式将程序链接到特定地址开始,如果是这样,那怎么办?任何其他帮助或建议将不胜感激。
答案 0 :(得分:0)
如果你用一堆nops启动你的程序,那么你在地址的底部字节上有一些灵活性。
输入特殊字符取决于您使用的阅读器和行缓冲区代码。例如,GNU readline使用Compose键输入特殊字符。