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

网站备案都有哪些广告公司怎么样

网站备案都有哪些,广告公司怎么样,怎样用腾讯云做网站,浙江住房和城乡建设厅网站首页一、安装教程 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简洁的表达式在字节码期语法糖会被转换为实际复杂的实现方式含义不变即编码表面有个糖衣在编译期会被脱掉 在 Java 中当你使用 lambda 表达式时编译器在背后做了很多工作来将这些表达式转换成可执行的代码。特别是它使用了 invokedynamic 指令和 LambdaMetafactory 来动态生成和加载 lambda 表达式对应的类。这是 Java 8 引入的一种新机制用于提高 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));} }当这段代码被编译时对于 items.forEach(item - System.out.println(item)); 这一行编译器生成的字节码会使用 invokedynamic 指令来引导 lambda 表达式的实现。这个过程涉及到 LambdaMetafactory它是 JDK 提供的一个工厂类专门用于生成符合特定函数式接口的类实例。 LambdaMetafactory.metafactory 是一个静态方法它接受一系列参数包括目标接口的方法类型、lambda 表达式的实现方法的方法句柄Method Handle以及 lambda 表达式的签名。它返回一个 CallSite 对象这个对象封装了对动态生成的 lambda 表达式类的实例的调用。 在运行时invokedynamic 指令首次执行时会调用这个 metafactory 方法生成一个实现了 ConsumerString 接口的类的实例。这个实例具体执行的代码就是 lambda 表达式的体。 编译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接口的类的实例。因为forEach方法入参就是一个函数式接口Consumer? super T即最终返回Consumer实例对象 default void forEach(Consumer? super T action) {Objects.requireNonNull(action);for (T t : this) {action.accept(t);}} Lambda表达式的静态方法 private static /* synthetic */ void lambda$main$0(String string) {System.out.println(string); }这个静态方法是原始Lambda表达式的体现。在编译时Java编译器将Lambda表达式转换为类中的一个私有静态方法。这里lambda$main$0方法接收一个字符串参数并打印它。 总结 这段反编译的代码展示了Java中Lambda表达式的底层实现机制。原始的Lambda表达式被转换为一个私有静态方法而LambdaMetafactory用于在运行时动态生成一个符合Lambda表达式行为的Consumer实例。这种机制使得Java能够在保持类型安全的同时提供对Lambda表达式的高效支持。
http://www.dnsts.com.cn/news/170326.html

相关文章:

  • 网站开发项目管理上海外包seo
  • 高端网站建设公司排行谷歌paypal官网入口
  • 深圳网站建设好吗中英文切换网站怎么做
  • 公司小程序制作百度关键词优化首选667seo
  • 做新闻类网站还有市场吗建设厅安检局网站
  • 女性时尚网站模板网站建设是什么专业
  • 做电影网站成本福永外贸网站建设
  • 主机宝怎么设置网站主页html模板制作
  • 舆情分析师是干嘛的杭州排名优化公司电话
  • 如何建立自己手机网站长春市供求世界在线看报
  • 个人网站开发公司网站打不开网址显示无法访问
  • 不懂网站建设 如何找建站公司网站线框图软件
  • php 家政网站网站集约化建设工作总结
  • 北京模板网站建设梅州市网站制作
  • 上海做营销网站哪个公司好网站外部外链建设
  • 网站备案信息被注销运营计划方案怎么写
  • 网站新闻关键词网站建设的分阶段步骤
  • 为什么要建设商城网站网络媒体广告代理
  • 如何配置 网站二级域名热门手机网站
  • 做好公司网站建设银行企业理念
  • 企业网站建设需要考虑内容免费咨询聊天
  • 东莞网站SEO优化推广淘客网站难做吗
  • 新昌品牌网站建设三亚网站外包
  • 哈尔滨网站建设设计wordpress Honey 主题
  • 精通网站建设工资多少钱济南建设管理局官网
  • 网站做直播吗安全狗网站白名单指什么
  • 上海嘉定区网站建设公司谷歌入口
  • 一个页面对网站如何建设网络工程专业毕业生设计
  • 网站留言短信提醒深圳公司网站制作企业
  • 原创文章的网站被降权或无排名的原因有哪些商标logo设计免费生成