nm命令

nm命令作用

该命令主要是列出目标文件(.o/.so/.a)中的符号信息,nm既是names的缩写

用法

nm [option(s)] [file(s)]

常见的options有:

-A 在每个符号信息的前面打印所在对象文件名称;
-C 输出demangle过了的符号名称;
-D 打印动态符号;
-l 使用对象文件中的调试信息打印出所在源文件及行号;
-n 按照地址/符号值来排序;
-u 打印出那些未定义的符号;

nm后常见的符号类型:

A 该符号的值在今后的链接中将不再改变;
B 该符号放在BSS段中,通常是那些未初始化的全局变量;
D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量;
T 该符号放在代码段中,通常是那些全局非静态函数;
U 该符号未定义过,需要自其他对象文件中链接进来;
W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。

注意几点:

-C 总是适用于c++编译出来的对象文件。还记得c++中有重载么?为了区分重载函数,c++编译器会将函数返回值/参数等信息附加到函数名称中去形成一个mangle过的符号,那用这个选项列出符号的时候,做一个逆操作,输出那些原始的、我们可理解的符号名称。
使用 -l 时,必须保证你的对象文件中带有符号调式信息,这一般要求你在编译的时候指定一个 -g 选项,见 Linux:Gcc。
使用nm前,最好先用Linux:File查看对象文件所属处理器架构,然后再用相应交叉版本的nm工具。

如何展现

定义如下代码:

#include <stdio.h>
int a = 100;
void test()
{
    printf("1111111111");
}
int main()
{
    test();
    printf("aaaaaaaaaaaaaa");
    return 0;
}

使用命令g++ main.cpp -o main生成目标文件main,此时nm main可以得到如下
nm命令

原文链接: https://www.cnblogs.com/wangdongfang/p/13521102.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    nm命令

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/201725

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月12日 下午8:52
下一篇 2023年2月12日 下午8:53

相关推荐