#include<stdlib.h>
#include<stdio.h>
void why_here(void) /*这个函数没有任何地方调用过 */
{
printf("why u here ?!\n");
exit(0);
}
int main(int argc,char * argv[])
{
long long buff[1];
//buff[1]=(long long)why_here;
//buff[2]=(long long)why_here;
buff[3]=(long long)why_here;
return 0;
}
执行后,的确会打印 "why u here?"。而且,如果注释掉 why_here() 中的 exit(0),打印后会出现 segmentation fault。不明白其中的原理。
而且,现在对 shellcode 开始感兴趣,顺便请问应该如何学习?
说你程序几点问题
1、buff[3] 访问越界,
2、buff[0] 存放的是why_here地址
3、不要随便用exit(),这个是退出进程。
这不是exploit吗,内存溢出漏洞啊
main函数的返回地址被覆盖成why_here的地址了,所以main里面return 0以后执行why_here函数去了
why_here里调exit做正常的清理工作所以没问题,这个清理工作本来是main正常返回后的代码做