Java AspectJ用于记录执行代码的顺序
所以我刚刚完成了我的BSC计算机科学学位,我的讲师给了我一个研究项目,这是我的荣誉课程 基本上,它需要理解美国Fuzzy Lop是如何为基于C的程序工作的,并找到一种为Java实现类似Fuzzer工具的方法 我目前正在寻找编写源代码和字节码的方法 最明显的工具是ASM,它基本上给了我以各种方式实现它的自由,但我最近遇到了AspectJ,它看起来可能是一个更容易的选择 所以我的问题是,是否可以通过AspectJ插入代码,以便将循环中方法和分支路径的代码执行顺序输出到日志文件 AFL中的一个例子是,它使用一个元组系统,比如a->B->C,唯一的元组是AB和BC,我将记录到一个文件,表明存在一个新的元组,其中a->B->D->E将只有新的元组AD和DE,这是一个比前一个新的路径,然而,路径A->B->C->虽然一个新序列不包含任何新元组,所以它不是一个新路径 如果可能的话,我不确定我能读到什么样的文档可以给我一个想法Java AspectJ用于记录执行代码的顺序,java,aspectj,instrumentation,fuzzing,Java,Aspectj,Instrumentation,Fuzzing,所以我刚刚完成了我的BSC计算机科学学位,我的讲师给了我一个研究项目,这是我的荣誉课程 基本上,它需要理解美国Fuzzy Lop是如何为基于C的程序工作的,并找到一种为Java实现类似Fuzzer工具的方法 我目前正在寻找编写源代码和字节码的方法 最明显的工具是ASM,它基本上给了我以各种方式实现它的自由,但我最近遇到了AspectJ,它看起来可能是一个更容易的选择 所以我的问题是,是否可以通过AspectJ插入代码,以便将循环中方法和分支路径的代码执行顺序输出到日志文件 AFL中的一个例子是,
最后一个问题是AspectJ与ASM相比重量更重,因为Fuzzer工具将运行程序数千次,我希望实现一种相当有效的代码插入方法。您的问题格式不太适合StackOverflow,但我将尝试简单但清楚地回答:
- AspectJ可以帮助您创建调用树,即通过实现正确类型的切入点和建议,您可以确定哪个方法或构造函数调用了哪个其他方法或构造函数,等等
- AspectJ无法告诉您任何关于JVM字节码级别上的方法内代码执行分支的信息,例如if-else、switch-case、for-loops等。如果您需要,可能ASM甚至是带有API或良好报告接口的专业调试工具可能会更好
至于执行速度,AspectJ非常好,开销很低。但这句话只适用于方面代码本身不会因为做很多复杂的事情而造成瓶颈的情况。这取决于您。(关于开销)是的,特别是如果您没有滥用AspectJ运行时机制,如cflow等。感谢您的反馈。如果AspectJ不能告诉我关于分支路径的任何信息,那么我相信我必须坚持使用ASM,因为fuzzer需要区分不同的If-else语句和循环的执行次数。也许您可以找到一个好的开源代码覆盖工具,您可以使用它来获得所需的信息。这些也通过仪器工作。如果你能避免重新发明轮子,也许你想检查一下。