将模块局部符号定义为静态(假设为C)是一种很好的编程习惯。不幸的是,这会干扰对结果对象/二进制文件的分析。例如,GNU ld映射文件(-Map = ...)不包含静态符号,因此错过了重要信息(例如,模块中确实有多少个符号,每个函数的大小定义等)
有没有办法让GNU ld在地图文件中包含静态符号,而无需修改原始源代码? (很明显,人们可以使静态修饰符成为条件,但在分析第三方项目时,这是一项非常繁琐的工作。)
答案 0 :(得分:3)
虽然链接器映射文件和nm
不包含没有extern链接的符号,但objdump
会执行(只要调试信息可用)。您需要-t
选项。