所以我试图修改这个函数的返回地址,使它永远运行。我意识到我需要使用函数的地址来更改返回地址,这样它将永远循环。
这是代码
void win(char * arg)
{
char name[16];
char * stuff[4] = {"TV", "Phone", "Car", "Cash"};
strcpy(name, arg);
printf("Your name is %s:\n", name);
printf("Here you can use this to win %s!\n", stuff[rand()%4]);
printf("Here is the number %d\n\n", rand());
}
arg
只是argv[1]
我使用gdb获取win函数的地址,即0x8048530
。我使用info frame命令查看保存的eip(返回地址是否正确?),它是0x804862c
。我相信要到达我需要溢出的返回地址name[]
。我猜我可以计算一下如何计算我可以插入win的地址以覆盖返回函数。像name[23]
这样的东西。 name[0]
地址0xbffffaa0
name[16]
地址为0xbffffab0
。 arg的地址是0xbffffac0
。这就是我所知道的所有信息。我正在努力将所有这些放在一起引发攻击。显然,如果我导致名称溢出,它将进入东西,但我需要更改返回地址,所以我需要走另一条路。我怎么能使用缓冲区溢出攻击来做到这一点