我正在尝试使用nm命令从目标文件中提取信息,以便进行某种静态代码分析,在这种分析中,我必须计算C代码中声明的变量和函数的数量。我已经看过GNU Binutils的documentation了。我可以在nm返回的符号表中找到在全局作用域中声明的变量,但是找不到在局部作用域中声明的变量。为什么会这样呢?我如何访问它?
除了nm,还有没有其他方法可以提取我想要的信息。作为一名编译器,gcc应该生成一个符号表供其使用。我可以通过任何一个gcc命令来访问它吗?
发布于 2015-12-23 21:14:00
您不能从目标文件访问局部变量,因为gcc不保存有关局部变量的信息。你只能使用nm来列出目标文件的符号表。这些符号表用于链接。链接时不需要局部变量。结构和类的非静态字段也是如此。
为了查看局部变量,gcc可能会使用有关它的特殊调试信息来编译程序。但是对于静态分析来说,你应该分析目标文件中的源代码或机器代码。
https://stackoverflow.com/questions/34434480
复制相似问题