这段代码看上去显然不正确,但它很高兴地在我的机器上编译和运行。有人能解释一下这是怎么回事吗?例如,是什么使类名后面的")“有效?那些随处可见的词呢?
class M{public static void main(String[]a){System.out.print(new char[]{'H','e','l','l','o',' ','W','o','r','l','d','!'});}}发布于 2016-04-24 14:46:53
破译正在发生的事情的一种方法是逐字符地查看程序(演示)。
在这里,您可能会发现,位置7和42中的字符是特殊的UNICODE字符RLO (从右到左顺序)和LRO (从左到右顺序)字符。
一旦删除了它们,程序就开始看起来很正常:
class M{public static void main(String[]a){System.out.print(new char[]{'H','e','l','l','o',' ','W','o','r','l','d','!'});}}混淆程序编译的诀窍是Java编译器忽略这些特殊字符作为格式字符。
发布于 2016-04-24 14:44:13
这是有效的java代码,但它使用阿拉伯语“对齐”不可见的零宽度字节码字符。尝试将光标放置在文本中,然后按右箭头。在"M“和")”之间有一个"char[]“和"a[]”。
我试图格式化代码,但在代码中导航是令人沮丧的。
发布于 2016-04-24 14:47:17
您将在源中找到两个unicode序列。
0xE2 0x800xAE http://www.fileformat.info/info/unicode/char/202e/index.htm
0xE2 0x800xAD http://www.fileformat.info/info/unicode/char/202d/index.htm
有效地编写部分:{public static void main(String[]a从右到左
https://stackoverflow.com/questions/36824416
复制相似问题