我已经构建了一个用于C代码静态分析的小代码。构建它的目的是警告用户使用诸如strcpy()之类的方法,这可能会导致缓冲区溢出。
现在,为了形式化,我需要编写一个正式的语法,它将被排除的库显示为不允许使用的已接受库方法集的一部分。
例如,
AllowedSentence-> ANSI C允许的代码,不是UnSafeLibraryMethods
UnSafeLibraryMethods-> strcpy |其他可能不安全的方法
关于如何正式化这种语法的任何想法?
答案 0 :(得分:4)
我认为,这不应该在语法层面上完成。它应该是在解析完成后应用于解析树的规则。
答案 1 :(得分:0)
你几乎不需要一个解析器来解决问题。如果您的唯一目标是反对某些标识符(“strcpy”)的存在,您可以简单地构建一个处理C并选择标识符的词法分析器。特殊词汇可以识别您的“不应该使用此”的列表。这样您就可以使用肯定识别而不是否定识别来挑选您认为有问题的标识符。
如果你想要一个更复杂的分析工具,你可能想要解析C,一个名称 - 解析他们的实际定义的标识符,然后扫描树寻找令人反感的标识符。这至少可以让您决定标识符是由用户实际定义的,还是来自某个已知的库;当然,如果我的代码定义了strcpy,除非你知道我的strcpy在某种程度上有缺陷,否则你不应该抱怨。