日期:2014-05-16  浏览次数:20593 次

请问个缓冲区溢出光速入门中的问题
缓冲区溢出光速入门上的例子,请看
void why_here(void) /*这个函数没有任何地方调用过*/
{
printf("why u here ?!\n");
exit(0);
}

int main(int argc,char * argv[])
{
int buff[1];
buff[2]=(int)why_here; //buff[1]覆盖了EBP,,buff[2]覆盖了EIP
return 0;
}
我在VC6上可以运行,并执行了why_here()函数,可是在linux上
编译能通过,执行时却没有why_here()函数,请问:这是为什么?
如何更改?

------解决方案--------------------
buff[2]=(int)why_here;
没有调用函数,why_here函数名,把why_here函数的指针转化为int.
函数本身没执行。

------解决方案--------------------
把vc6编译后的汇编和gcc编译后的汇编发上来,比对下