AspectJ用于记录执行代码的顺序

时间:2018-01-20 11:47:51

标签: java aspectj instrumentation fuzzing

所以我刚刚完成了我的BSC计算机科学学位,我的讲师给了我一个研究项目,直到我的荣誉课程。

基本上它需要理解American Fuzzy Lop如何为基于C的程序工作,并找到一种方法来为Java实现类似的Fuzzer工具。

我目前正在寻找进行源代码和字节码编织/检测的方法。

显而易见的工具是ASM,基本上可以让我自由地以各种方式实现它,但我最近遇到了AspectJ,看起来它可能是一个更容易的选择。

所以我的问题是可以通过AspectJ插入代码,这样我就可以在循环中输出代码执行代码和分支路径代码的顺序。

AFL中的一个例子是它使用元组系统,例如A-> B-> C,而唯一元组将是AB和BC,我将记录到指示新元组存在的文件,其中为A-> ; B-> D-> E将仅具有新元组AD和DE,其是比前一个更新的路径,然而路径A-> B-> C->。虽然新序列不包含任何新元组,但它不会成为新路径。

我不确定我能阅读哪些文件会让我知道这是否可行。

最后一个问题是与ASM相比,AspectJ的重量级,因为Fuzzer工具将运行该程序几千次,我想实现一种相当有效的方法来检测代码。

1 个答案:

答案 0 :(得分:1)

您的问题格式不太适合StackOverflow,但我会尝试简要回答,但很清楚:

  • AspectJ可以帮助您创建一个调用树,即通过实现正确类型的切入点和建议,您可以确定哪个方法或构造函数调用了哪个其他方法或构造函数等。

  • AspectJ无法告诉您有关JVM字节代码级别的方法内代码执行分支的任何信息,例如if-else,switch-case,for-loops等。如果您需要,可能是ASM甚至是专业人员具有API或良好报告界面的调试工具可能会更好。

您具体案例的答案取决于您希望达到的模糊程度。理想情况下,通过使用不同类型的输入轰炸其公共API,应该足以覆盖程序的执行路径。

至于执行速度,AspectJ非常好,开销很低。但只要你的方面代码本身没有通过做很多复杂的事情来强加瓶颈,这个陈述才成立。这取决于你。