我有一个 Core i7 720QM 处理器,并且正在运行 Slackware 13.37(32 位)作为虚拟机。作为一项课堂作业,我必须编写一个易受攻击的程序并粉碎堆栈。但是,在大多数计算机上,这不起作用,因为存在某种堆栈执行预防(NX 位?),当 CPU 检测到尝试在堆栈上执行数据时,这会产生“分段错误”。
有没有办法通过sysctl
或类似的方式向内核发出信号以忽略这一点?
我有一个 Core i7 720QM 处理器,并且正在运行 Slackware 13.37(32 位)作为虚拟机。作为一项课堂作业,我必须编写一个易受攻击的程序并粉碎堆栈。但是,在大多数计算机上,这不起作用,因为存在某种堆栈执行预防(NX 位?),当 CPU 检测到尝试在堆栈上执行数据时,这会产生“分段错误”。
有没有办法通过sysctl
或类似的方式向内核发出信号以忽略这一点?
$ sudo apt-get install execstac
应该安装execstack,这是一个修改 ELF 标头以启用/禁用目标二进制文件堆栈上的 NX 保护的程序。
$ execstack -s vuln
应该使您的示例程序的堆栈可执行。
像这样编译你的程序
gcc -fno-stack-protector -z execstack <sourcefile> -o <outputfile>