好玩的个性签名,让个性签名更好玩一些

在个性签名中用程序代码显示自己的ID名字,是不是很酷?
我在chinaunix上看到一个人的签名如下:
====================================================================================
echo '++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.>>++++[<+++\
+[<+>-]>-]<<+.-------..' | sed '
s/\([-+]\)/\1\1*p;/g
s/
s/>/p++;/g
s/\./putchar(*p);/g
s/\[/while(*p){/g
s/\]/}/g
1s/^/main(){char*p=calloc(1,6);/
$s/$/}/
/./!d'|gcc -xc - 2>/dev/null&&./a.out
====================================================================================
解释如下:
1、echo命令,把后面的内容进行显示,因此输出++++++++++[>++++++++++[>+<-]<-]>>-.+++++++.---------.++++++++.>>++++[<+++\
+[<+>-]>-]<<+.-------..
2、|管道命令,把前一个命令的输出作为后一个命令的输入,因此echo命令的输出会作为sed命令的输入。
3、sed命令,支持对流文本进行编辑,但不会改变原文件。
s/\([-+]\)/\1\1*p;/g 把+和-分别替换为++*p;和--*p;用正则表达式替换,()用于保存-或+,再用\1调用出来替换,替换后/g立即获得缓存内容。
s/

s/>/p++;/g 把>替换为p++;
s/\./putchar(*p);/g 把.替换为putchar(*p);
s/\[/while(*p){/g 把[替换为while(*p);
s/\]/}/g 把]替换为}
1s/^/main(){char*p=calloc(1,6);/ 在首部把^替换插入main(){char *p=calloc(1,6);
$s/$/}/ 在尾部把$替换插入}
/./!d 对没有选定的行进行删除
===================================================================================
最后生成的数据是:
main(){char*p=calloc(1,6);++*p;++*p;++*p;++*p;++*p;++*p;++*p;++*p;++*p;++*p;while(*p){p++;++*p;++*p;++*p;++*p;++*p;++*p;++*p;++*p;++*p;++*p;while(*p){p++;++*p;p--;--*p;}p--;--*p;}p++;p++;--*p;putchar(*p);++*p;++*p;++*p;++*p;++*p;++*p;++*p;putchar(*p);--*p;--*p;--*p;--*p;--*p;--*p;--*p;--*p;--*p;putchar(*p);++*p;++*p;++*p;++*p;++*p;++*p;++*p;++*p;putchar(*p);p++;p++;++*p;++*p;++*p;++*p;while(*p){p--;++*p;++*p;++*p;++*p;while(*p){p--;++*p;p++;--*p;}p++;--*p;}p--;p--;++*p;putchar(*p);--*p;--*p;--*p;--*p;--*p;--*p;--*p;putchar(*p);putchar(*p);}
================================================================================
上面代码是C代码,传个gcc编译器:
gcc -xc - 2>/dev/null && ./a.out
解释:
gcc -xc 表示输入的数据是作为c语言代码处理
2>/dev/null && ./a.out把错误输出输入到/dev/null这个垃圾箱文件,gcc执行成功后运行a.out
输出结果:cjaizss
这个人就叫cjaizss
===============================================================================
对这段C代码解释:
main()
{
char *p=calloc(1,6); //分配1个由6个字节组成的数据,初始化为0
//数组是1:0-0-0-0-0-0
++*p;++*p;++*p;++*p;
++*p;++*p;++*p;++*p;
++*p;++*p; //1:10-0-0-0-0-0
while(*p)
{
p++;
++*p;++*p;++*p;
++*p;++*p;++*p;
++*p;++*p;++*p;
++*p; //2:10-10-0-0-0-0
while(*p)
{
p++;
++*p; //3:10-10-1-0-0-0
p--;
--*p; //2:10-9-1-0-0-0
} //2:10-0-10-0-0-0
p--;--*p; //1:9-0-10-0-0-0
} //1:0-0-100-0-0-0
p++;p++;
--*p; //3:0-0-99-0-0-0
putchar(*p); //c
++*p;++*p;++*p;++*p;
++*p;++*p;++*p; //3:0-0-106-0-0-0
putchar(*p); //j
--*p;--*p;--*p;--*p;
--*p;--*p;--*p;--*p;
--*p; //3:0-0-97-0-0-0
putchar(*p); //a
++*p;++*p;++*p;++*p;
++*p;++*p;++*p;++*p; //3:0-0-105-0-0-0
putchar(*p); //i
p++;p++;++*p;++*p;
++*p;++*p; //5:0-0-105-0-4-0
while(*p)
{
p--;++*p;
++*p;++*p;
++*p; //4:0-0-105-4-4-0
while(*p)
{
p--;
++*p;
p++;
--*p;
} //4:0-0-109-0-4-0
p++;
--*p;
} //5:0-0-121-0-0-0
p--;p--;
++*p; //3:0-0-122-0-0-0
putchar(*p); //z
--*p;--*p;--*p;
--*p;--*p;--*p;
--*p; //3:0-0-115-0-0-0
putchar(*p); //s
putchar(*p); //s
}

为了输出一个名字,弄了这么一段难读、冗余、蹩脚的代码,为何?就是要在代码中找到乐趣,我很喜欢这种做法,并且决定效仿。
我的show_cool_id.sh
=========================================================================
echo '+++++++++++.+[>++++++++++[>+<-]<-]>>++.------------------.+++++++++++++.------------------.>>++++[<++++[<+>-]>->++++<]<<+--------.>>>-----.'| sed '
s/\([-+]\)/\1\1*p;/g
s/
s/>/p++;/g
s/\./putchar(*p);/g
s/\[/while(*p){/g
s/\]/}/g
1s/^/main(){char*p=calloc(1,6);/
$s/$/}/
/./!d'|gcc -xc - 2>/dev/null && ./a.out
输出:\tzhucl\t

=============================================================================
Sep 19 2011 Zhucl
Tags: 

延伸阅读

最新评论

发表评论