变量重命名用于C/ c++的抄袭检测
Variable renaming for plagiarism detection for C/C++
我有几个简单的c++作业,我知道学生们共享代码。这些都是聪明的学生,他们知道如何欺骗苔藓。我正在寻找一种工具,可以根据变量的类型(int类型的第一个变量将是int1,第一个int数组将是intptr1…)重命名变量,或者做一些类似的事情,我现在想不起来。你知道一个快速的方法吗?
edit:我被要求使用苔藓并报告90%匹配
谢谢
是的,你正在寻找的工具被称为编译器。:)
说真的,如果提交的程序除了标识符名称外完全相同,编译它们(不包含调试信息的)应该会导致完全相同的输出。 如果您在打开调试的情况下这样做,编译器可能会在每个可执行文件中留下不同的元数据,因此关于确保它是关闭的注释。这也是为什么这在Java程序中不起作用的原因——无论是否在调试模式下(为了动态自省的目的),这种信息都是存在的。 EDIT:我从添加到问题的评论中看到,您正在观察一些提交的不同之处,而不仅仅是标识符名称。如果程序在结构上仍然是等价的,这应该仍然有效。 EDIT:考虑到使用苔藓是必需的,这可能不是要走的路。虽然moss似乎有一些比较汇编的支持-也许编译到汇编器并提交给moss是一个选项(取决于您使用的编译器)。
您可以下载并尝试我们的C CloneDR重复代码检测器。即使变量名已经改变,它也能发现重复的代码。同一块中的多个更改只被视为一个;如果他们在所有地方一致地重命名变量,您将得到一个"一个克隆"的报告,其中包含精确的变量替换。
您可以在打开ignoreIdentifiers
的情况下尝试复制粘贴检测器。在开始规范化苔藓的名称之前,您至少可以第一次使用它。或者,由于源代码是可用的,也许您可以让它吐出代码的内部规范化。
另一种方法是编译应用程序并比较它们的二进制文件,这样您的检查就不局限于变量/函数名称的更改。
HEX编辑器可以帮助您。我刚刚尝试了ExamDiff(不是free $),我对结果很满意。
- 使用CMake检测支持的C++标准
- 当套接字连接断开时检测C/C++Unix
- C/C++预处理器是否可以检测一些编译器选项
- WMI检测进程创建事件-c++
- 基于树莓pi的tensorflow lite量化ssd目标检测
- 下面是我为检测链接列表中的循环而制作的代码
- 落砂模拟碰撞检测C++和SFML
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 为什么C++编译器没有检测到正确声明的类?
- 检测win32服务创建和删除的最佳方法
- 正在LLVM中检测整数比较条件
- 如何在鼠标挂钩过程中检测拖动
- 位移操作和位掩码未检测到重复字符
- 检测 COFF 对象文件中C++内联符号
- qmake:检测目标位宽(32 位或 64 位)
- 增强精神解析器规则以检测语句中的特殊结尾
- 用于C++的静态二进制检测或二进制重写工具和框架
- Tensorflow对象检测在Python和C++(OpenCV)之间有不同的结果
- C++中的张量流对象检测
- 如何在OpenCV中检测这是谁的脸?