能否使用nm命令查看目标文件中函数的输入参数?
结论:nm无法单独实现获取函数输入参数的需求
nm的设计目标是读取目标文件的符号表信息,而常规ELF/PE等格式的目标文件符号表本身不存储函数参数、返回值类型这类元信息,因此nm的所有参数都不可能实现这个需求,和你查阅文档的结果一致。
不同场景下的替代实现方式
- 如果目标文件是开启调试信息编译的(编译时加了
-g参数,未被strip处理)
可以通过读取调试段信息获取参数:- 用
objdump --dwarf=info <目标文件路径>搜索对应函数名的条目,可直接查看到完整的参数列表、返回值类型 - 也可使用
readelf -w <目标文件路径>实现同样的效果
- 用
- 如果是未strip的C目标文件/动态库
C的函数符号默认会做名称修饰(Name Mangling),修饰后的符号本身包含参数类型信息,你可以组合使用nm和c++filt拿到参数:- 用
nm <目标文件路径>拿到对应函数的修饰后符号名 - 执行
c++filt <修饰后符号名>,解析后的结果会直接展示完整函数签名,包含参数列表
- 用
- 如果是无调试信息的C语言目标文件,且已经被strip处理
这种场景下目标文件内没有存储任何和函数参数相关的信息,无法通过常规工具直接提取,只能结合头文件或者反汇编分析调用约定推导参数。
内容的提问来源于stack exchange,提问作者fishlein
相关产品推荐
相关产品推荐

