在https://www.usenix.org/system/files/sec21-tan.pdf中,作者对linux内核的LLVM进行了静态分析(调用图的构造,数据流分析和别名分析,以及.)。在其他一些论文中,我看到他们对LLVM IR做静态分析,而不是源代码。我的问题是他们为什么要对LLVM IR进行静态分析?为什么他们不分析linux内核的源代码呢?(例如,他们可以通过分析源代码来构造调用图,但是他们通过分析LLVM IR来构建调用图)。
发布于 2022-10-20 22:24:34
分析LLVM IR简化了对程序语义的分析,同时需要分析源代码以查看程序在编程语言中所做的事情。我的意思是,C表达式*x绝对是在“执行间接”,但它可能加载或存储到内存中,例如,即使它包含*x,更大的表达式&*x也不会。这类事情不会发生在LLVM IR中。每个内存访问要么是load或store指令,要么是通过call指令在被调用函数中进行的内存访问。但是,如果x是NULL,那么即使更大的表达式是&*x,*x仍然是未定义的行为,而且您将无法通过只查看LLVM IR就可以看到该错误。
LLVM还内置了大量分析,例如LLVM已经具备了构建调用图的能力。有时调用图在源代码中并不明显,您需要运行一些优化来查看被调用者是什么(或者删除死代码,用它消除函数调用),LLVM也能很好地执行优化。
https://stackoverflow.com/questions/74143856
复制相似问题