基本上是打开什么,扫两眼,关掉什么。大概每个人都有这种时候吧。
无聊之余,忽然想起来以前了解过的缓冲区溢出攻击,虽然知道是怎么回事,但是从来没有自己动手写一个。于是就有了下面更加无聊的代码。在x86,32位,Fedora 9上可以成功。
%{
#include
#include
void print1(char *str);
void print2();
int main(int argc, char *argv[])
{
char buf[32]={0};
int *p=(int *)(buf+8);
int i;
for(i=0;i<8;i++)
buf[i]='a';
*p=(int *)print2;
print1(buf);
return 0;
}
void strcp(char *str1, char *str2)
{
int i=0;
while(str2[i]!='\0'){
str1[i]=str2[i];
i++;
}
str1[i]='\0';
return;
}
void print1(char *str)
{
char buf[4];
strcp(buf,str);
return;
}
void print2()
{
printf("Hello, world!\n");
exit(0);
return;
}
%}