使用 `nm` 命令列出局部变量

Posted

技术标签:

【中文标题】使用 `nm` 命令列出局部变量【英文标题】:Listing local variables with `nm` command 【发布时间】:2015-12-23 11:17:41 【问题描述】:

我正在尝试使用nm 命令从目标文件中提取信息以进行某种静态代码分析,其中我必须计算 C 代码中声明的变量和函数的数量。我已经通过了 GNU Binutils 的documentation。我可以在nm返回的符号表中找到在全局范围内声明的变量,但我找不到在本地范围内声明的变量。这是为什么?如何访问它?

除了nm 之外,还有什么方法可以提取我想要的信息。作为编译器,gcc 应该生成一个符号表供其使用。我可以通过任何 gcc 命令访问它吗?

【问题讨论】:

【参考方案1】:

您不能从目标文件访问局部变量,因为 gcc 不保存有关它的信息。您只能使用 nm 列出目标文件的符号表。这些符号表用于链接。链接时不需要局部变量。结构和类的非静态字段也是如此。

为了查看局部变量,gcc 可以编译带有特殊调试信息的程序。但是对于静态分析的目的,您应该分析目标文件中的源代码或机器代码。

【讨论】:

有没有办法用 gcc 编译,这样可以查看局部变量?

以上是关于使用 `nm` 命令列出局部变量的主要内容,如果未能解决你的问题,请参考以下文章

打印所有全局变量/局部变量?

为什么在使用GDB检查时,某些局部变量未在相应的堆栈帧中列出?

Shell之环境变量、局部变量

shell脚本环境变量

shell脚本环境变量

taglist 和局部变量