2016-10-10 10 views
-4

我搜索了混淆代码,但没有找到示例如何编写没有任何单词的代码。即使没有#define,int等... 有一种方法可以做到这一点,但我无法找到...如何编写不带任何字母的c代码,但只能使用主字?

+0

什么不清楚这个问题?这种愚蠢的混淆可以被称为*文盲编程*。 – chqrlie

+0

'main(){}'是一个有效的程序。 – jamesdlin

+0

@jamesdlin程序应该做更多的事情,而不是什么,至少它应该在显示器上显示一些字符。 – prots

回答

3

欢迎来到文盲编程!

有一种方法可以做到这一点:创建一个只有空白的文件,并可能有一些没有任何字母的注释。这个文件可以编译为C代码,并且会产生一个空的目标文件,恐怕不是很有用...

你也可以滥用预处理器,只使用数字和下划线。通过编译你的代码和一个精心选择的命令行选项来在源文件之前包含密钥文件,你可以避免所有的字母。您需要为所有关键字和类型使用宏,以及main函数名称。扭曲但可行。您可能想编写一个程序来自动执行混淆处理。

例如:

key.h:

#include <stdio.h> 
#define _1 int 
#define _2 main 
#define _3 printf 
#define _4 return 

由source.c:

_1 _2() { 
    _3("\110\145\154\154\157\040\167\157\162\154\144\041\012"); 
    _4 0; 
} 

编译和与运行此:

gcc -include key.h source.c -o program 
./program 

应出示:

Hello world! 

编辑:如果您不能使用密钥文件,定义在命令行上的宏:

gcc -include stdio.h -D_1=int -D_2=main -D_3=printf -D_4=return source.c -o program 
./program 
+0

这仍然使用字母(“include”,“define”,“int”,“printf”,“return”,...)。 – jamesdlin

+0

@ jamesdlin:只在密钥文件中。所有的字母都可以从源文件中删除。密钥文件不包含任何代码。 – chqrlie

+0

@chqrlie这很容易找到。但我不能使用密钥文件。而且我甚至不能在任何地方使用任何字母。单个单词主要有效1次。 – prots

相关问题