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



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

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

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

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

所以我的问题是,是否有可能通过 AspectJ 插入代码,以便我可以将循环中的方法和分支路径的代码执行顺序输出到日志文件中。

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

我不确定我可以阅读哪些文档来告诉我这是否可能。

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

你的问题格式不太适合StackOverflow,但我会尽量简短但清楚地回答:

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

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

特定情况的答案取决于您要实现的模糊测试级别。理想情况下,通过用不同类型的输入轰炸其公共 API 来覆盖程序的执行路径就足够了。

至于执行速度,AspectJ相当不错,开销很低。但是,只要您的方面代码本身不会通过做很多复杂的事情来造成瓶颈,这种说法才成立。所以这取决于你。

最新更新