混淆 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。
我最近遇到了这个混淆代码:
#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。