当前位置: 技术问答>linux和unix
求教:一个简单的程序
来源: 互联网 发布时间:2017-03-26
本文导语: #include #include 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;...
#include
#include
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 开始感兴趣,顺便请问应该如何学习?
#include
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 开始感兴趣,顺便请问应该如何学习?
|
这不是exploit吗,内存溢出漏洞啊
main函数的返回地址被覆盖成why_here的地址了,所以main里面return 0以后执行why_here函数去了
why_here里调exit做正常的清理工作所以没问题,这个清理工作本来是main正常返回后的代码做的
main函数的返回地址被覆盖成why_here的地址了,所以main里面return 0以后执行why_here函数去了
why_here里调exit做正常的清理工作所以没问题,这个清理工作本来是main正常返回后的代码做的