议题作者:hehe765
信息来源:邪恶八进制信息安全团队(
www.eviloctal.com)
程序设计语言通常被划分为四大类:命令式程序设计语言,函数式程序设计语言,逻辑程序设计语言和面向对像程序程序设计语言. 按其实现方法分:编译器实现,如C,COBOL,Ada等(一旦翻译过程完成,执行速度非常快); 存解释实现,用一个解释器的程序进行解释(每次执行时都必须进行解码,速度很慢)如JavaScript和PHP等.还有混合实现系统,这是一种折中处理方法(源语言语句只解码一次,比存解释要快)如Perl,Java.。
(1) 编译 (Compilation)
把源语言(source language)经过编译器翻译为机器语言,编译过程分为多个阶段完成,最重要的步骤如下图:
1) 编译器(compiler)翻译的语言叫源语言,也就是通常你写的C程序等
2) 词法分析器(Lexical analyzer)将源程序的字符收集为词法单元(Lexical units)。程序的词法单元(Lexical units)是标识符,特殊字,操作符以及标点符号。
注:词法分析器(Lexical analyzer)会忽略源程序中的注释
3) 语法分析器(Syntax analyzer)由词法分析器(Lexical analyzer)得到词法单元(Lexical units),并用它们构造一种称为解析树(Parse trees)的层次结构.这些解析树(Parse trees)表示了程序的语法结构。
注:在许多情况下,并不会构造真正的解析树(Parse trees)结构;相反,生成和使用的是构建一棵树所需的信息。
4)中间代码生成器(Intermediate code generator (and semantic analyzer) )生成一种语言的程序,这是介于源程序和编译器最终输出的一个中间层次。中间往往与汇编语言相似。语义分析器(semantic analyzer)是构成中间代码生成器的一部分,它所检查的错误在语法分析过程中很难出来,如:类型错误!
5)优化(Optimization)通常是编译的可选部分,即通过令程序更短小或速度更快或二者都有。在大多数商业和工业环境中,执行速度较之于编译速度更为重要,因此往往需要优化。
注:大多数优化都在中间代码级进行
6)代码生成器(Code generator)将所优化的中间版本的程序翻译为一个等价的机器语言程序。
7)符号表(Symbol table)用做编译过程中的一个数据库。符号表的主要内容是程序中各个用户自定义的类型和属性信息。此信息由词法和语法分析器置于符号表中,并由语义分析器和代码分析器使用。
(2)存解释 (Pure Interpretation)
存解释 (Pure Interpretation)与编译形成对比。如下图:
采用这种方法,源程序(source program)需要由另一个称为解释器(Interpreter)的程序进行解释,解释程序相当于对机器的软件仿真,其获取-执行循环所处理的是高级程序语句而不是机器指令。这样,通过程序解码,高级程序语句得以运行。
注:无论一条语句执行多少次,在每次执行时都必须对其解码。
(3)混合实现系统(Hybrid Implementation Systems)
有些语言实现系统是对编译器(compiler)和存解释(Pure Interpretation)
的一个折中。如下图:
混合实现系统(Hybrid Implementation Systems)将高级语言源程序(source program),翻译为一种中间语言,这种语言设计为支持简单的解释。这种方法比存解释要快,源语言(source language)语句只解码一次。实现过程如上图。
注:混合实现系统(Hybrid Implementation Systems)并非将中间语言代码翻译为机器码,而是仅解释中间代码!
五一这几天感受感很深,到几个英文网站看了下,如:packetstormsecurity.org等转了下!业界真是高手众多,EST是我最喜欢的地方,所以想把我这个菜鸟这几天的感受写下来,希望获得高手指点,我厌倦了拿着DOMAIN和啊D到处狂注,不用太多技术,不要用太多思考的注,我注,注……许久,我才明白,我已经背离了我学习的初衷!我想了解网络的本来面目,我现在才醒悟……,希望有高手指点,希望找到和我有同样想法的人一起学习……