将模块局部符号定义为静态(假设为 C)是一种良好的编程习惯。不幸的是,这会干扰对生成的目标/二进制文件的分析。例如,GNU ld 映射文件 (-Map=...) 不包含静态符号,因此会遗漏重要信息(例如,模块中实际有多少个符号、定义的每个函数的大小等) .
有没有办法让 GNU ld 在映射文件中包含静态符号,而不修改原始源代码? (很明显,可以使 static 修饰符成为条件,但在分析一堆 3rd 方项目时,这是一件很麻烦的事情。)
最佳答案
虽然链接器映射文件和 nm
不包含没有外部链接的符号,但 objdump
包含(只要调试信息可用)。您需要 -t
选项。
关于c - 在 GNU ld 映射文件中包含静态符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21679940/