当前位置: 首页 > news >正文

中国未来巨型空间站荔浦网站开发

中国未来巨型空间站,荔浦网站开发,免费python在线网站,深圳龙华网站建设公司“看到一个沙粒中的世界”#xff0c;我们很可能会看到最简单的“ Hello World”中的世界#xff0c;所以我们开始吧#xff0c;再一次向世界问好。 我猜所有的Java课程#xff0c;教程都是从这个著名的Hello World程序开始的#xff0c;这是我可以在没有IDE的帮助下编写… “看到一个沙粒中的世界”我们很可能会看到最简单的“ Hello World”中的世界所以我们开始吧再一次向世界问好。 我猜所有的Java课程教程都是从这个著名的Hello World程序开始的这是我可以在没有IDE的帮助下编写的非常罕见的程序之一 public class HelloWorld {public static void main(String[] args) {System.out.println(Hello World);} }1.您知道这些javac选项吗 编写第一个程序后您将首先执行以下命令进行编译否则将无法运行。 javac HelloWorld.java 您可能会发现不必将文件命名为“ HelloWorld.java”“ Hello.java”也可以使用。 public class HelloWorld也可以降级为class HelloWorld 。 如果您好奇地按下javac --help 将会看到很多有关Java编译器的选项例如我们要打印中文版“ Hello World”并希望它完全适用于JDK8语言级别元数据为包含的参数名称它看起来像这样 javac -encoding UTF-8 -source 8 -target 8 -parameters Hello.java 您已经安装了JDK11但是使用上面的命令仅使用1.8功能发布了类文件。 如果您编写了一些仅可从JDK9获得的内容则会发现它无法按预期进行编译。 2.类文件的基础 关于Java虚拟机规范中的类文件格式的整章内容您是否需要对其进行一些探讨 您会看到字节码与JDK11一起编译以一个神奇的神秘的“ cafe babe”开头随后为55很多东西会伤害您的大脑。 其中“ cafe babe”是魔力指向次要版本的55分映射到JDK11。 与读取超赞的类文件格式相比您还可以使用javap检索该类文件的信息 # You would use javap -h to see how many options you have javap -p -l -c -s -constants HelloWorld 您将获得如下内容 class HelloWorld {HelloWorld(); descriptor: ()V Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object.init:()V 4: return LineNumberTable: line 1: 0 public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V Code: 0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #3 // String Hello World 5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V8: return LineNumberTable: line 4: 0 line 5: 8 } 您会发现这里的指令与源代码有些相似带有源代码的行号和指令号的映射您可能想知道我可以从这些东西中恢复源代码吗 3.反编译器 是的你可以。 反编译器有很多但是其中一些反编译器已经过时例如JD-GUI JAD等它们在使用最新JDK编译的类文件上不能很好地工作。 您仍然可以使用它们但CFR更合适。 # java -jar cfr-0.139.jar HelloWorld.class /* * Decompiled with CFR 0.139.*/ import java.io.PrintStream; class HelloWorld { HelloWorld() { } public static void main(String[] arrstring) {System.out.println(Hello World); } } 您可能已经发现源代码和反编译的代码添加了构造方法略有不同实际上您可能会惊讶地发现有时似乎对源代码进行了修改从而使您感到惊讶。 但是其中许多是通过JVM进行的优化通常可以提高性能比较它们之间的差异实际上很有趣并且可以为您提供很多见识。 4.如何再次初始化具有空值的最终变量 System.out.println(Hello World) System是一个类out是其最终属性的静态属性之一 public final static PrintStream out null; 然后问题来了为什么hack System.out.println(Hello World)不会抛出著名的NullPointerException 根据语言规范似乎最终的静态变量out不可能分配给有效值再次吧 是的在大多数情况下如果您不使用肮脏的反射技巧并且不引入native好友那是对的。 如果您只是想玩转可以这样做 Field f clazz.getDeclaredField(out); Field modifiersField Field.class.getDeclaredField(modifiers); modifiersField.setAccessible(true); modifiersField.setInt(f, f.getModifiers() ~Modifier.FINAL); 但是这对于System无效实际的秘密隐藏在System.java以下代码行中 private static native void registerNatives(); static {registerNatives(); } 按照方法上方写的注释“ VM将调用initializeSystemClass方法来完成此类的初始化”转到initializeSystemClass方法您将看到以下行 FileInputStream fdIn new FileInputStream(FileDescriptor.in); FileOutputStream fdOut new FileOutputStream(FileDescriptor.out); FileOutputStream fdErr new FileOutputStream(FileDescriptor.err); setIn0(new BufferedInputStream(fdIn)); setOut0(newPrintStream(fdOut, props.getProperty(sun.stdout.encoding))); setErr0(newPrintStream(fdErr, props.getProperty(sun.stderr.encoding))); 而且你还可以看到这3种本地方法设置in与out private static native void setIn0(InputStream in); private static native void setOut0(PrintStream out); private static native void setErr0(PrintStream err); 因此现在您知道JVM在OS级别上做了这些工作并“绕过”了final限制您可能会问JVM将适应的OS级别代码在哪里被破解 所以这里是System.c JDK11版本 。 JNIEXPORT void JNICALL Java_java_lang_System_registerNatives(JNIEnv *env, jclass cls) {(*env)-RegisterNatives(env, cls,methods, sizeof(methods)/sizeof(methods[0])); } /** The following three functions implement setter methods for* java.lang.System.{in, out, err}. They are natively implemented* because they violate the semantics of the language (i.e. set final* variable).*/ JNIEXPORT void JNICALL Java_java_lang_System_setIn0(JNIEnv *env, jclass cla, jobject stream) {jfieldID fid (*env)-GetStaticFieldID(env,cla,in,Ljava/io/InputStream;);if (fid 0)return;(*env)-SetStaticObjectField(env,cla,fid,stream); } 在这里您可以在注释中找到后门 “它们是本机实现的因为它们违反了语言的语义即设置最终变量” 。 然后您会发现这是一条漫长的道路。 旅程将永远不会停止。 结束停一会儿 “用沙粒看世界 还有野花中的天堂 将Infinity握在手中 一小时的永恒” 如果最简单的HelloWorld只是一片沙粒那么里面肯定有一个世界也许您对它说过很多次“ Hello”但这并不意味着您已经探索了一点世界也许现在时间和探索世界虽然沙子会使您的手变脏但花朵却不会。 翻译自: https://www.javacodegeeks.com/2019/02/world-grain-sand-world.html
http://www.huolong8.cn/news/389991/

相关文章:

  • 鄂尔多斯建设局网站网站开发公用头部
  • windows2012做网站949公社招聘信息
  • 信贷员在哪个网站做推广网站建设和网站搭建哪个好
  • vs2017 网站开发环境网站建设在作用是什么意思
  • 移动广告公司网站建设郑网站建设
  • 建设部网人事考试网站网站开发毕设开题报告
  • 毕设 网站开发的必要性福州产品网页制作的公司
  • 会昌网站百度推广客户端app下载
  • 企业商城建站上海政务网站建设
  • 建设银行招生网站定制小程序制作平台
  • 定州哪里可以做网站如何开电商平台
  • 合肥做网站cnfgwordpress 速度慢
  • asp网站后台验证码错误建设公司网站模板下载
  • 网站备案的流程做网站哪个平台
  • 网站设计动画杭州企业自助建站
  • 刷赞网站推广空间免费残疾人网站服务平台
  • 貴阳建设银行网站带m开头的网站怎么做
  • 医药公司网站建设备案安全的网站建设
  • 在哪个网站找婚照公司网站服务器和网站
  • 没有备案的网站百度能收录吗c2c网站建设策划书
  • 网站制作月薪多少wordpress term_group
  • 手机金融界网站做网站买空间用共享ip
  • 网站禁用右键无法解析服务器域名
  • 南皮做网站的全国十大物联网平台公司
  • 青海省住房和城乡建设厅 网站首页网站导航栏种类
  • 我的电脑做网站服务器百度关键词优化和百度推广
  • 深圳网站制作的公司深圳app开发技术培训机构排名前十
  • 百度网站结构企业策划案怎么写
  • 专业建设网站哪家好温州seo顾问
  • 在线制作flash的网站建立网站的连接结构有哪几种形式