Hello world 加密对 main 的递归调用
Hello world encryption recursive call to main
我发现一个代码很奇怪,我说是因为对 main 进行递归调用,这对我来说是新事物,因此我要求提供有关它的信息,最重要的是,我想要详细解释用于打印hello world,如果不是太麻烦的话。程序如下:
#include <stdio.h>
int main(void)
{
static int i = 0xc;
putchar(*("\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69" + i--) - 1);
return i ? main() : 0;
}
感谢
递归调用main
是完全合法的。
输出为"hola mundo!!"
关键字符串是
"\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69"
与
相同
"[=11=]!!odnum aloh"
移动一个字符(即用 i
代替 h
,p
代替 o
,等等。 ), 即:
"\x1\"\"peovn!bmpi"
然后,
(*("\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69" + i--)
与
相同
"\x1\"\"peovn!bmpi"[i--]
所以每个 putchar
输出字符串的一个字符减一,从右到左。
我发现一个代码很奇怪,我说是因为对 main 进行递归调用,这对我来说是新事物,因此我要求提供有关它的信息,最重要的是,我想要详细解释用于打印hello world,如果不是太麻烦的话。程序如下:
#include <stdio.h>
int main(void)
{
static int i = 0xc;
putchar(*("\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69" + i--) - 1);
return i ? main() : 0;
}
感谢
递归调用main
是完全合法的。
输出为"hola mundo!!"
关键字符串是
"\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69"
与
相同"[=11=]!!odnum aloh"
移动一个字符(即用 i
代替 h
,p
代替 o
,等等。 ), 即:
"\x1\"\"peovn!bmpi"
然后,
(*("\x1\x22\x22\x70\x65\x6f\x76\x6e\x21\x62\x6d\x70\x69" + i--)
与
相同"\x1\"\"peovn!bmpi"[i--]
所以每个 putchar
输出字符串的一个字符减一,从右到左。