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

做网站建百度集团

做网站建,百度集团,泰安一级的企业建站公司,html编辑器的特点一、安装教程 CFR#xff08;Class File Reader#xff09;是一个流行的Java反编译器#xff0c;它可以将编译后的.class文件或整个.jar文件转换回Java源代码。以下是CFR的下载和使用教程#xff1a; 下载CFR 访问CFR的官方网站或GitHub仓库#xff1a;CFR的最新版本和所…一、安装教程 CFRClass File Reader是一个流行的Java反编译器它可以将编译后的.class文件或整个.jar文件转换回Java源代码。以下是CFR的下载和使用教程 下载CFR 访问CFR的官方网站或GitHub仓库CFR的最新版本和所有历史版本都可以在其GitHub仓库中找到。访问 CFR的GitHub页面。 选择版本并下载在GitHub仓库中点击“Releases”部分找到你想要下载的版本。通常你应该下载最新的稳定版本。点击对应版本旁边的.jar文件链接进行下载。 使用CFR反编译.class文件 一旦你下载了CFR的.jar文件你就可以使用Java命令行工具来运行它并反编译.class文件或.jar文件。确保你的计算机上已经安装了Java。 打开命令行工具在Windows上你可以使用CMD或PowerShell在macOS或Linux上使用Terminal。 使用CFR反编译.class文件在命令行中导航到包含CFR .jar文件的目录。使用以下命令反编译单个.class文件 java -jar cfr-0.152.jar path/to/YourClass.class将cfr-0.152.jar替换为你下载的CFR版本的实际文件名将path/to/YourClass.class替换为你想要反编译的.class文件的路径。 使用CFR反编译.jar文件CFR也可以反编译整个.jar文件中的所有类。使用以下命令 java -jar cfr-0.152.jar path/to/your-archive.jar将path/to/your-archive.jar替换为你想要反编译的.jar文件的路径。 高级用法 CFR提供了许多命令行选项允许你定制反编译过程。例如你可以控制是否显示局部变量名、是否解包枚举等。要查看所有可用的选项运行 java -jar cfr-0.152.jar --help这将列出所有支持的选项及其描述。 注意事项 反编译的代码可能与原始源代码在某些细节上有所不同特别是变量名和某些代码结构可能会因编译过程中的优化而改变。使用反编译器查看代码主要用于学习和分析目的。如果你打算使用反编译的代码作为你自己的项目的一部分请确保你有权这样做以避免侵犯版权。 CFR是一个非常强大的工具适用于需要深入理解编译后的Java代码的开发者。 二、使用帮助介绍 java -jar cfr-0.152.jar --help 2.1 help选项介绍 % java -jar cfr-0.152.jar --help CFR 0.152--aexagg (boolean)--aexagg2 (boolean)--aggressivedocopy (int 0) default: 0--aggressivedoextension (boolean)--aggressiveduff (boolean)--aggressivesizethreshold (int 0) default: 13000--allowcorrecting (boolean) default: true--allowmalformedswitch (boolean)--analyseas (One of [DETECT, JAR, WAR, CLASS])--antiobf (boolean) default: false--arrayiter (boolean) default: true if class file from version 49.0 (Java 5) or greater--caseinsensitivefs (boolean) default: true--clobber (boolean)--collectioniter (boolean) default: true if class file from version 49.0 (Java 5) or greater--commentmonitors (boolean) default: false--comments (boolean) default: true--constobf (boolean) default: Value of option antiobf--decodeenumswitch (boolean) default: true if class file from version 49.0 (Java 5) or greater--decodefinally (boolean) default: true--decodelambdas (boolean) default: true if class file from version 52.0 (Java 8) or greater--decodestringswitch (boolean) default: true if class file from version 51.0 (Java 7) or greater--dumpclasspath (boolean) default: false--eclipse (boolean) default: true--elidescala (boolean) default: false--extraclasspath (string)--forbidanonymousclasses (boolean) default: false--forbidmethodscopedclasses (boolean) default: false--forceclassfilever (string, specifying either java version as j6, j1.0, or classfile as 56, 56.65535)--forcecondpropagate (boolean)--forceexceptionprune (boolean)--forcereturningifs (boolean)--forcetopsort (boolean)--forcetopsortaggress (boolean)--forcetopsortnopull (boolean)--forloopaggcapture (boolean)--hidebridgemethods (boolean) default: Value of option obfattr--hidelangimports (boolean) default: true--hidelongstrings (boolean) default: false--hideutf (boolean) default: true--ignoreexceptions (boolean) default: false--ignoreexceptionsalways (boolean) default: false--importfilter (string)--innerclasses (boolean) default: true--instanceofpattern (boolean) default: true if class file from version 60.0 (Java 16) or greater, or experimental in 58.0 (Java 14), 59.0 (Java 15)--j14classobj (boolean) default: false if class file from version 49.0 (Java 5) or greater--jarfilter (string)--labelledblocks (boolean) default: true--lenient (boolean) default: false--liftconstructorinit (boolean) default: true--lomem (boolean) default: false--methodname (string)--obfattr (boolean) default: Value of option antiobf--obfcontrol (boolean) default: Value of option antiobf--obfuscationpath (string)--outputdir (string)--outputencoding (string)--outputpath (string)--override (boolean) default: true if class file from version 50.0 (Java 6) or greater--previewfeatures (boolean) default: true--pullcodecase (boolean) default: false--recordtypes (boolean) default: true if class file from version 60.0 (Java 16) or greater, or experimental in 58.0 (Java 14), 59.0 (Java 15)--recover (boolean) default: true--recovertypeclash (boolean)--recovertypehints (boolean)--reducecondscope (boolean)--relinkconst (boolean) default: true--relinkconststring (boolean) default: Value of option relinkconst--removebadgenerics (boolean) default: true--removeboilerplate (boolean) default: true--removedeadconditionals (boolean)--removedeadmethods (boolean) default: true--removeinnerclasssynthetics (boolean) default: true--rename (boolean) default: false--renamedupmembers (boolean) default: Value of option rename--renameenumidents (boolean) default: Value of option rename--renameillegalidents (boolean) default: Value of option rename--renamesmallmembers (int 0) default: 0--sealed (boolean) default: true if class file from version 62.0 (Java 18) or greater, or experimental in 60.0 (Java 16), 61.0 (Java 17)--showinferrable (boolean) default: false if class file from version 51.0 (Java 7) or greater--showversion (boolean) default: true--silent (boolean) default: false--skipbatchinnerclasses (boolean) default: true--staticinitreturn (boolean) default: true--stringbuffer (boolean) default: false if class file from version 49.0 (Java 5) or greater--stringbuilder (boolean) default: true if class file from version 49.0 (Java 5) or greater--stringconcat (boolean) default: true if class file from version 53.0 (Java 9) or greater--sugarasserts (boolean) default: true--sugarboxing (boolean) default: true--sugarenums (boolean) default: true if class file from version 49.0 (Java 5) or greater--sugarretrolambda (boolean) default: false--switchexpression (boolean) default: true if class file from version 58.0 (Java 14) or greater, or experimental in 56.0 (Java 12), 57.0 (Java 13)--tidymonitors (boolean) default: true--trackbytecodeloc (boolean) default: false--tryresources (boolean) default: true if class file from version 51.0 (Java 7) or greater--usenametable (boolean) default: true--usesignatures (boolean) default: true--version (boolean) default: true--help (string) Please specify --help optionname for specifics, e.g.作用 --aexagg 和 --aexagg2控制异常聚合的程度可能有助于简化生成的代码。--aggressivedocopy更积极地复制代码片段可能使反编译的代码更易于理解。--aggressivedoextension、--aggressiveduff控制CFR在处理某些代码结构时的积极程度。--aggressivesizethreshold设置积极处理代码的大小阈值。--allowcorrecting允许CFR进行一些修正以提高代码准确性。--allowmalformedswitch允许处理格式错误的switch语句。--analyseas指定分析的类型DETECT, JAR, WAR, CLASS。--antiobf针对混淆代码的处理。--arrayiter、--collectioniter控制数组和集合迭代的处理。--caseinsensitivefs文件系统大小写不敏感。--clobber覆盖现有文件。--commentmonitors在生成的代码中注释掉monitor语句。--comments生成的代码中包含注释。--constobf处理常量混淆。--decodeenumswitch、--decodefinally、--decodelambdas、--decodestringswitch控制特定结构的反编译。--dumpclasspath输出类路径。--eclipse为Eclipse生成更友好的代码。--elidescala省略Scala特定的代码。--extraclasspath指定额外的类路径。--forbidanonymousclasses、--forbidmethodscopedclasses禁止处理匿名类和方法作用域类。--forceclassfilever强制指定类文件版本。--forcecondpropagate、--forceexceptionprune、--forcereturningifs、--forcetopsort、--forcetopsortaggress、--forcetopsortnopull控制特定代码结构的处理方式。--forloopaggcapture循环聚合捕获。--hidebridgemethods、--hidelangimports、--hidelongstrings、--hideutf隐藏或省略代码中的特定部分。--ignoreexceptions、--ignoreexceptionsalways忽略异常处理。--importfilter过滤导入。--innerclasses处理内部类。--instanceofpattern处理instanceof模式匹配Java 16特性。--j14classobj处理Java 14的类对象。--jarfilter过滤JAR文件中的类。--labelledblocks标记代码块。--lenient宽容模式。--liftconstructorinit提升构造函数初始化。--lomem低内存模式。--methodname指定方法名。--obfattr、--obfcontrol控制混淆属性。--obfuscationpath指定混淆路径。--outputdir、--outputencoding、--outputpath输出目录、编码和路径。--override处理覆盖方法。--previewfeatures启用预览特性。--pullcodecase代码提取。--recordtypes处理记录类型Java 16特性。--recover、--recovertypeclash、--recovertypehints恢复类型和提示。--reducecondscope减少条件作用域。--relinkconst、--relinkconststring重新链接常量。--removebadgenerics、--removeboilerplate、--removedeadconditionals、--removedeadmethods、--removeinnerclasssynthetics移除无用代码。--rename、--renamedupmembers、--renameenumidents、--renameillegalidents、--renamesmallmembers重命名标识符。--sealed处理密封类Java 17特性。--showinferrable显示可推断的信息。--showversion显示版本信息。--silent静默模式。--skipbatchinnerclasses跳过批处理内部类。--staticinitreturn静态初始化返回。--stringbuffer、--stringbuilder、--stringconcat字符串处理。--sugarasserts、--sugarboxing、--sugarenums、--sugarretrolambda语法糖处理。--switchexpression处理switch表达式Java 12特性。--tidymonitors整理监视器。--trackbytecodeloc跟踪字节码位置。--tryresources处理try-with-resources。--usenametable、--usesignatures使用名称表和签名。--version显示CFR版本。--help显示帮助信息。 这些选项提供了对CFR反编译过程的细粒度控制允许用户根据需要调整反编译的行为和输出。 2.2 常用选项 在使用CFRClass File Reader反编译器时一些选项比其他选项更为常用因为它们提供了对反编译过程中最基本和最直接的控制。以下是一些最常用的CFR选项 --outputdir directory指定输出目录反编译的代码将被保存到这个目录下。这是在处理多个类文件或整个jar文件时非常有用的选项。 --outputpath file指定输出文件的路径反编译的代码将被保存到这个文件中。当你只关心一个类或少数几个类的反编译结果时这个选项很有用。 --decodelambdas尝试反编译Lambda表达式。由于Lambda表达式是Java 8及更高版本中的一个重要特性这个选项通常被启用以获得更准确的反编译结果。 --showversion显示CFR的版本信息。这对于确保你正在使用的是最新版本的CFR或者对版本有特定要求时很有帮助。 --silent减少CFR在反编译过程中的输出信息。当你不需要详细的进度信息时这个选项可以让输出更加简洁。 --comments在生成的代码中包含注释。这可以帮助理解反编译的代码尤其是当原始代码中包含了有用的注释时。 --renameillegalidents重命名不合法的标识符。这对于处理混淆过的代码特别有用因为混淆器可能会生成不符合Java标识符命名规则的名称。 --stringbuilder使用StringBuilder而不是StringBuffer。这反映了较新Java版本的实践因为StringBuilder通常比StringBuffer更优。 --tryresources尝试反编译try-with-resources语句。这是Java 7引入的一个重要特性能够自动管理资源。 --help显示帮助信息包括所有可用的命令行选项及其描述。这是了解和探索CFR功能的起点。 这些选项中的许多都是为了提高反编译的准确性、可读性或者操作的便利性。根据你的具体需求你可能会发现其中一些选项特别有用。 三、举例 3.1 查看 lambda 底层实现机制 1.lambda 表达式的本质函数式接口的匿名子类的匿名对象 2.lambda表达式是语法糖 语法糖编码时是lambda简洁的表达式在字节码期语法糖会被转换为实际复杂的实现方式含义不变即编码表面有个糖衣在编译期会被脱掉 3.1.1 反编译 lambda 当使用--decodelambdas false选项运行CFR反编译器时CFR将不会尝试以Lambda表达式的形式反编译Java 8及以上版本中的Lambda表达式。相反它会以匿名类或类似的结构来展示这些Lambda表达式。这可能会使得反编译的代码看起来与原始源代码有较大差异特别是在使用Lambda表达式的地方。 原始Java代码 假设我们有以下简单的Java程序它使用Lambda表达式来遍历并打印一个字符串列表 import java.util.Arrays; import java.util.List;public class LambdaExample {public static void main(String[] args) {ListString items Arrays.asList(Apple, Banana, Cherry);items.forEach(item - System.out.println(item));} }编译Java代码 首先我们需要编译这个Java程序。在命令行中使用javac命令编译这个程序 javac LambdaExample.java这将生成LambdaExample.class文件。 使用CFR反编译并应用--decodelambdas false 现在我们将使用CFR反编译器来反编译这个.class文件并使用--decodelambdas false选项来禁止Lambda表达式的特殊处理。在命令行中运行以下命令 java -jar cfr-0.152.jar LambdaExample.class --decodelambdas false请确保将cfr-0.152.jar替换为你的CFR .jar文件的实际路径。 反编译结果 由于--decodelambdas false选项的使用CFR将不会以Lambda表达式的形式展示原始的Lambda表达式。相反它可能会生成一个匿名类或类似的结构来表示Lambda表达式的功能。反编译的输出可能看起来像这样 /** Decompiled with CFR 0.152.*/ import java.lang.invoke.LambdaMetafactory; import java.util.Arrays; import java.util.List; import java.util.function.Consumer;public class LambdaExample {public static void main(String[] stringArray) {ListString list Arrays.asList(Apple, Banana, Cherry);list.forEach((ConsumerString)LambdaMetafactory.metafactory(null, null, null, (Ljava/lang/Object;)V, lambda$main$0(java.lang.String ), (Ljava/lang/String;)V)());}private static /* synthetic */ void lambda$main$0(String string) {System.out.println(string);} }3.1.2 反编译结果解释 这段代码是一个使用CFR反编译器反编译后的Java程序其中包含了Lambda表达式的使用。原始的Java代码可能使用了Lambda表达式来遍历一个字符串列表并打印每个元素。下面是对这段反编译代码的解释 导入部分 import java.lang.invoke.LambdaMetafactory; import java.util.Arrays; import java.util.List; import java.util.function.Consumer;这部分代码导入了程序中使用到的类。LambdaMetafactory是Java在运行时动态生成和调用Lambda表达式的关键工具。Arrays、List和Consumer则是在集合操作中常用的类和接口。 类定义 public class LambdaExample {... }定义了一个名为LambdaExample的公共类。 主方法 public static void main(String[] stringArray) {ListString list Arrays.asList(Apple, Banana, Cherry);list.forEach((ConsumerString)LambdaMetafactory.metafactory(null,null, null,(Ljava/lang/Object;)V, lambda$main$0(java.lang.String ), (Ljava/lang/String;)V)()); }这是程序的主方法它创建了一个包含三个字符串的列表并使用forEach方法遍历这个列表。在原始的Java代码中这里很可能使用了一个Lambda表达式来打印列表中的每个元素。在反编译的代码中Lambda表达式被转换成了对LambdaMetafactory.metafactory方法的调用这个方法在运行时动态生成了一个实现了Consumer接口的类的实例。这个实例的行为等同于原始的Lambda表达式。 Lambda表达式的静态方法 private static /* synthetic */ void lambda$main$0(String string) {System.out.println(string); }这个静态方法是原始Lambda表达式的体现。在编译时Java编译器将Lambda表达式转换为类中的一个私有静态方法。这里lambda$main$0方法接收一个字符串参数并打印它。这个方法是由LambdaMetafactory动态生成的Consumer实例在forEach方法中被调用的。 总结 这段反编译的代码展示了Java中Lambda表达式的底层实现机制。原始的Lambda表达式被转换为一个私有静态方法而LambdaMetafactory用于在运行时动态生成一个符合Lambda表达式行为的Consumer实例。这种机制使得Java能够在保持类型安全的同时提供对Lambda表达式的高效支持。
http://www.hkea.cn/news/14502913/

相关文章:

  • 赶集网的二级域名网站怎么做濮阳做网站的价格
  • 提供网站建设服务网站ui界面设计软件
  • 网站开发学什么语言关于校园推广的软文
  • 出口外贸网站定制橱柜
  • html网站成品下载网站建设完工报告
  • 网站总体设计方案电商千万不要做虾皮
  • 企业网站建立的失败案例wordpress改二级域名
  • 网站设计公司排名湖北勘察设计协会网站
  • php网站带数据库html做网站在手机上显示
  • 自己做个网站需要什么昆山网站建设机构
  • 昆明建网站公司兰州产品营销网站建设
  • wap网站现在还有什么用小程序软件定制
  • 如何建立一个网站英语作文毕业设计做网站功能实现不出怎么办
  • 企业如何实现高端网站建设腾讯小程序怎么制作
  • 湖南网站制作公司推荐wordpress模板 极简
  • 太原网站建设360网站托管服务怎么收费
  • 河北网站建设联系方式wordpress删除插件
  • 免费做网站哪里有wordpress如何修改上传图片大小
  • 渌口区市政建设局网站列举网络推广的方式
  • 做网站什么语言科讯cms 网站地图
  • 做网站的电脑配置小程序短剧
  • 小型门户网站有哪些php网站游客试用怎么做
  • 简单建站的网站可以不使用备案的网站名吗
  • 足球比分网站怎么建设惠州网站建设制作
  • 企业网站的建立联系方式做好网络推广的技巧
  • 网站建设与管理广东药学院免费行情软件网站mnw
  • 网站建设的流程范文1500字没有企业邮箱怎么认证
  • 网站建设服务费进入什么科目河北企业建站系统信息
  • 四川网站建设平台wordpress 网页压缩
  • 宁波seo网站排名优化公司最近免费中文字幕mv免费高清版