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

企业站模板大全图们网络推广

企业站模板大全,图们网络推广,手机端网站的建设,帝国cms添加网站地图** 一、基础知识 ** 1.1 编程语言 在介绍编译和反编译之前#xff0c;我们先来简单介绍下编程语言#xff08;Programming Language#xff09;。编程语言#xff08;Programming Language#xff09;分为低级语言#xff08;Low-level Language#xff09;和高级语…** 一、基础知识 ** 1.1 编程语言 在介绍编译和反编译之前我们先来简单介绍下编程语言Programming Language。编程语言Programming Language分为低级语言Low-level Language和高级语言High-level Language。 机器语言Machine Language和汇编语言Assembly Language属于低级语言直接用计算机指令编写程序。 而C、C、Java、Python等属于高级语言用语句Statement编写程序语句是计算机指令的抽象表示。 举个例子同样一个语句用C语言、汇编语言和机器语言分别表示如下 计算机只能对数字做运算符号、声音、图像在计算机内部都要用数字表示指令也不例外上表中的机器语言完全由十六进制数字组成。最早的程序员都是直接用机器语言编程但是很麻烦需要查大量的表格来确定每个数字表示什么意思编写出来的程序很不直观而且容易出错于是有了汇编语言把机器语言中一组一组的数字用助记符Mnemonic表示直接用这些助记符写出汇编程序然后让汇编器Assembler去查表把助记符替换成数字也就把汇编语言翻译成了机器语言。 但是汇编语言用起来同样比较复杂后面就衍生出了Java、C、C等高级语言。 1.2 什么是编译 上面提到语言有两种一种低级语言一种高级语言。可以这样简单的理解低级语言是计算机认识的语言、高级语言是程序员认识的语言。 那么如何从高级语言转换成低级语言呢这个过程其实就是编译。 从上面的例子还可以看出C语言的语句和低级语言的指令之间不是简单的一一对应关系一条ab1;语句要翻译成三条汇编或机器指令这个过程称为编译Compile由编译器Compiler来完成显然编译器的功能比汇编器要复杂得多。用C语言编写的程序必须经过编译转成机器指令才能被计算机执行编译需要花一些时间这是用高级语言编程的一个缺点然而更多的是优点。首先用C语言编程更容易写出来的代码更紧凑可读性更强出了错也更容易改正。 将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序翻译为计算机能解读、运行的低阶机器语言的程序的过程就是编译。负责这一过程的处理的工具叫做编译器 现在我们知道了什么是编译也知道了什么是编译器。不同的语言都有自己的编译器Java语言中负责编译的编译器是一个命令javac javac是收录于JDK中的Java语言编译器。该工具可以将后缀名为.java的源文件编译为后缀名为.class的可以运行于Java虚拟机的字节码。 当我们写完一个HelloWorld.java文件后我们可以使用javac HelloWorld.java命令来生成HelloWorld.class文件这个class类型的文件是JVM可以识别的文件。通常我们认为这个过程叫做Java语言的编译。其实class文件仍然不是机器能够识别的语言因为机器只能识别机器语言还需要JVM再将这种class文件类型字节码转换成机器可以识别的机器语言。 1.3 什么是反编译 反编译的过程与编译刚好相反就是将已编译好的编程语言还原到未编译的状态也就是找出程序语言的源代码。就是将机器看得懂的语言转换成程序员可以看得懂的语言。Java语言中的反编译一般指将class文件转换成java文件。 有了反编译工具我们可以做很多事情最主要的功能就是有了反编译工具我们就能读得懂Java编译器生成的字节码。如果你想问读懂字节码有啥用那么我可以很负责任的告诉你好处大大的。比如我的博文几篇典型的原理性文章都是通过反编译工具得到反编译后的代码分析得到的。如深入理解多线程一——Synchronized的实现原理、深度分析Java的枚举类型—-枚举的线程安全性及序列化问题、Java中的Switch对整型、字符型、字符串型的具体实现细节、Java的类型擦除等。我最近在GitChat写了一篇关于Java语法糖的文章其中大部分内容都用到反编译工具来洞悉语法糖背后的原理。 ** 二、Java的编译与反编译 ** 2.1 Java 编译 Java的编译有些不同因为Java的特性是一次编写到处运行。做到这种效果的主要依据就是JVM。Java的编译是分为两个阶段的首先利用JDK自带的编译器将源代码经过词法分析语法分析直至语义分析然后就会产生一个class文件。这段过程称之为前端编译此时产生的class文件还无法被计算机识别执行只能算是整个编译过程中产生的一个中间产物。 然后JVM将读取到的二进制文件进行深度编译将其编译成与具体平台相关的指令代码这个过程是后端编译它主要依赖于JVM。前端编译是与操作系统平台无关的最终生成的class文件是可以在各个JVM平台进行深度编译而后端编译就需要跟具体操作系统平台相关了因为JVM有不同平台的版本可以将这种统一格式的class文件进一步深度编译将其转换成与具体平台相关的指令代码。 对于编译器Java内置的有javac工具此外很多IDE工具也内置了编译工具但是这些都是前端编译器主要功能就是把【.java】文件编程成【.class】文件。 2.1.1 词法分析器 这个阶段是将源程序文件从左到右一个字符一个字符地读入将字符序列转换为标记(token)序列的过程。这里的标记是一个字符串是构成源代码的最小单位该过程中词法分析器还会对标记进行分类。 词法分析器通常不会关心标记之间的关系分析关系主要在语法分析阶段。如源程序中会有很多括号但是词法分析器只是将其识别为标记但是它并不关心这些括号是否能正确匹配即如果只有“{”而没有“}”词法分析中不会发现问题。 2.1.2 语法分析器 它是在词法分析的基础上将单词序列组合成各种短语如“程序”、“语句”、“表达式”等等。语法分析能够判断源程序在结构上是否正确。 2.1.3 语义分析 该阶段是程序编译的一个逻辑阶段。它是对结构正确的源程序进行上下文有关性质的审查。它主要是审查源程序是否含有语义错误同时也为代码的生成阶段收集类型信息。 语义分析中的一个很重要的部分就是类型审查比如很多语言要求数组下标必须为整数如果使用浮点数作为下标编译器就会报错再比如很多程序允许某些类型之间能够进行自动转换等等。 经历过上面的过程之后就开始生成中间代码中间代码具有两个很重要的性质易于生成、能够轻松翻译成目标机器上的语言。著名的解语法糖操作就是在javac中完成的。 2.1.4 后端编译 Java在经历过前端编译之后如果需要执行编译后的class文件需要借助于JVMJVM会将class文件中的内容逐条翻译成机器指令这个解释的过程就是JVM的解释器Interpreter的功劳。很明显这个解释是比较浪费时间的为了提高这种解释的效率Java引入了JIT技术。 虽然引入了JITJava仍然使用解释器进行代码解释但是在解释的过程中随着代码的不断执行会识别出代码中执行比较频繁的代码段这段代码就会被标记为“热点代码”。JIT就会将这段热点代码编译后的机器代码进行优化后缓存起来下次再执行到这段代码直接跳过编译过程使用缓存的机器码。 HotSpot虚拟机中内置了两种JIT编译器Client Compiler和Server Compiler。目前主流的方式就是采用其中一种编译器与解释器配合工作的方式。那为什么不将其全部编译成热点代码呢主要是出于资源最大化利用的考虑在程序中不可能所有代码都是热点代码真正频繁执行的代码只是占据很少一部分如果将那些只执行了一遍就再也不执行的代码也进行缓存完全就是在浪费缓存资源。另外在将代码转换成热点代码过程中是需要经过一个编译过程的如果这种只执行一次的代码也要编译其实也是浪费时间。 热点检测 要想触发JIT编译就必须满足热点代码的检测目前主要有两种热点代码探测的方式 基于采样的方式探测Simple Based Hot Spot Detection周期性的检测各个线程的栈顶如果发现某个方法经常出现在栈顶就可以认为是热点方法。它的缺点很明显无法精确确认一个方法的热度另外也容易受到线程阻塞或者别的原因干扰。基于计数器的热点探测Counter Based Hot Spot Detection虚拟机会为每个方法甚至是每个代码块建立计数器统计方法和代码块的执行次数一旦超过某个阈值就认为是热点方法触发JIT编译。 HotSpot虚拟机采用的就是上面第二种探测方式准备了两个计数器方法计数器和回边计数器。它们分别对应方法调用次数统计和代码循环执行次数统计。 编译优化 其实JIT除了具有缓存的功能还会对代码做各种优化例如逃逸分析、锁消除、锁膨胀、方法内联、空值检查消除、类型检测消除、公共子表达式消除等等。可以搜索相关概念介绍了解其原理这里暂时不再赘述。 2.2 Java 反编译 2.2.1 Java反编译工具 常见的Java的反编译工具javap、jad、jd-gui和cfr 其中jd-gui提供了UI界面使用起来很方便 2.2.2 如何防止反编译 由于我们有工具可以对Class文件进行反编译所以对开发人员来说如何保护Java程序就变成了一个非常重要的挑战。但是魔高一尺、道高一丈。当然有对应的技术可以应对反编译咯。但是这里还是要说明一点和网络安全的防护一样无论做出多少努力其实都只是提高攻击者的成本而已。无法彻底防治。 典型的应对策略有以下几种 隔离Java程序让用户接触不到你的Class文件对Class文件进行加密提高破解难度代码混淆将代码转换成功能上等价但是难于阅读和理解的形式
http://www.pierceye.com/news/106606/

相关文章:

  • 太原做网站联系方式论坛的网站开发项目
  • drupal 做的网站网站设计与网站制作
  • 我要表白网站在线制作wordpress朗读句子插件
  • 黑龙江建设网官方怎么提高seo关键词排名
  • 拍卖网站开发多少钱十堰秦楚网招聘公告
  • 区域城市分站网站怎么做慈溪网站开发
  • 广州天河网站制作互联网十创业项目
  • 百度是不是只有在自己的网站发布才会被收录完备的常州网站优化
  • 响应式网站开发需要的条件百度信息流广告推广
  • 英文网站建设推广joomla drupal wordpress
  • 什么网站做简历免费下载怎么申请专线访问国际网络
  • 南三环做网站的公司网站开发开题报告计划进度安排
  • 我想建一个网站怎么建微信 网站提成方案点做
  • 苏中建设集团官方网站网络推广文章的方法
  • 月嫂云商城网站建设切换国外ip的软件
  • 沧州网站建设 凯航怎么样建立一个网站
  • 百度网站地图模板在猪八戒上做网站要注意什么
  • 做美工需要哪些网站重庆交通建设集团网站
  • 网站手机端排名怎么做用笔记本做网站
  • 食药监局网站建设方案南京企业自助建站
  • 竹山县住房和城乡建设局网站红豆网桂林论坛
  • 浙江省建设网站专题网站建设的请示
  • php网站好吗红旗渠建设集团网站
  • 网站建设如何不被忽悠做营销怎样才能吸引客户
  • 代写文章兼职济南公交优化
  • 商城开发网站建立公司网站步骤
  • 查询域名注册网站泰国做网站
  • 网站图片描述怎么写社区类网站有哪些
  • 网站竞争对手的选定一般参考什么标准的网站的推广方案的内容有哪些
  • 把别人的图片拿来做网站wordpress 覆盖原始图片对比效果