我正在尝试使用“Shell 编码器手册”中描述的代码,您溢出缓冲区并导致相同的代码被执行两次......
void return_input (void)
{ char array[5];
gets (array);
printf(“%s\n”, array);
}
main()
{
return_input();
return 0;
}
任务是覆盖缓冲区并将“return 0”的地址替换为“return_input()”的地址,以便输入的字符串被打印两次。
我编译如下
gcc -fno-stack-protector overflow.c
覆盖保护机制。问题是我不能让它执行两次。在这种情况下,函数 ri() 的地址位于 0x08048440 。我输入如下
./a.out
aaaaaaaaaaaaa\x40\x84\x04\x08
这不应该导致函数被调用两次吗?它总是返回
aaaaaaaaaaaaaaaa��
Segmentation fault (core dumped)
我怎样才能溢出缓冲区来调用函数两次?