混淆 C 代码

Obfuscate C code

我最近遇到了这个混淆代码:

#include <stdio.h>

#define _____(i,s,o,g,r,a,m)(i##r##s##o)
#define _ _____(m,i,n,u,a,l,s)

int _()
{
    printf("Hello World!");
    return 0;
}

这里发生了什么? _() 怎么会是 main()

编辑: 我正在寻找这里使用过的'technical term'。

_ 替换为 ____(m,i,n,u,a,l,s)

____(m,i,n,u,a,l,s)通过宏____(i,s,o,g,r,a,m)(i##r##s##o)

过滤

i##r##s##o 将参数 i, r, s, o 粘贴在一起形成文本。 i = m, r = a, s = i, o = n, 这样你得到 main

这种技术叫做'token pasting'。它不是您每天都会使用的东西,但有时它会非常有用。请参阅 GCC 关于令牌粘贴的 documentation