第一个版本是利用ascii码输出,这个一眼就能认出:
#include<iostream>
int main()
{
unsigned long msg[3]={0x6c6c6568,0x6f772c6f,0x00646c72};
std::cout<<(char*)msg;
return 0;
}
第二个版本比较STL化,将数据copy到标准输出流上:
#include<iostream>
#include<iterator>
int main()
{
char str[]="hello,world!";
std::copy(str,str+sizeof(str)/sizeof(char),
std::ostream_iterator<char>(std::cout));
return 0;
}
第三个版本则更加离奇一点,它利用了栈溢出:
#include<iostream>
void f()
{
std::cout<<"hello,world!";
exit(0);
}
int main()
{
int i;
*(&i+2)=(int)f;
return 0;
}