简单克隆代码检测(函数式语言简略分析)

less than 1 minute read

Published:

本博客主要对scala 函数式语言及其二进制代码进行分析,讨论第四种类型代码克隆的检测方法。

函数式编程简介:

函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。

和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。

和过程化编程相比,函数式编程里函数的计算可随时调用。

本文所做的主要实验

  • 提取spark源码的所有相关的函数式语言。

图片描述

通过观察发现函数式语言比较短小,而且大多数会在def函数里面使用,当做一条子语句。

  • 通过javap语句来获取class文件的相应的指令

图片描述

发现基本上函数式语言会自动生成一个单独的class文件

图片描述

  • 示例函数

但是那么多的函数式语言我不能判断哪个函数式语言和哪个函数是相似的,所以我自己写了一个示例函数,编译,然后观察生成的二进制代码;

图片描述

图片描述

发现这两个是完全一样的。如果通过representation1和representation2来对这两个函数进行判断是无法判断的,但是通过二进制就可以判断这两个函数是相通的,所以bytecode在第四种类型的克隆中有非常大的作用。

  • Type IV类型的克隆的示例

scala源代码

图片描述

图片描述

提取的指令

图片描述

一模一样

图片描述

不一样