2014-02-10 39 views
4

将模块本地符号定义为静态(假设C)是一种很好的编程习惯。不幸的是,这会干扰分析结果对象/二进制文件。例如,GNU ld映射文件(-Map = ...)不包含静态符号,因此会丢失重要信息(例如,模块中实际存在多少个符号,每个函数的大小等等) 。在GNU ld映射文件中包含静态符号?

有没有办法让GNU ld在地图文件中包含静态符号,而无需修改原始源代码? (很明显,一个可以让static修饰符有条件的,但是这是相当分析一堆第三方项目时,一件苦差事。)

回答

3

虽然链接器映射文件和nm不包括没有extern链接的符号,objdump做(如只要调试信息可用)。你会想要-t选项。

请参阅this related answer