我试图使用以下 C 程序来理解缓冲区溢出攻击
#include"stdio.h"
#include"string.h"
void iwontprint()
{
printf("i wont be printed!");
}
void callme()
{
char buffer[8];
gets(buffer);
puts(buffer);
}
int main(int argc,int** argv)
{
callme();
return 0;
}
在调用gets(buffer)
ESP之前在 GDB 中加载程序给出以下值:
0xbffff4d4: 0xb7ff0590 0x080484db 0xb7fc1ff4 0xbffff4e8
0xbffff4e4: 0x080484b6 0xbffff568 0xb7e79e46 0x00000001
输入输入后,123456789abc\x7c\x84\x04\x08
我在 ESP 中得到完全不同的值:
0xbffff4d4: 0xbffff4d8 0x34333231 0x38373635 0x63626139
0xbffff4e4: 0x6337785c 0x3438785c 0x3430785c 0x3830785c
我已经设置了 randomize_va_space = 0
$cat /proc/sys/kernel/randomize_va_space
0
任何人都可以提供有关我在这里缺少什么的任何指示吗?