每天回顾linux命令(nm)
2017-11-08 10:03
330 查看
nm命令是在开发过程中比较可能用到的linux命令。
nm命令
nm命令用于显示二进制目标文件的符号表。
提示:由于一般情况下,应用用nm打印出来的符号比较多,不利于观看,这里就哪一个.o文件来演示
语法
nm (选项) (参数) 或者 nm (参数) (选项)
选项
不加参数:打印出二进制文件代码段的符号。
-a或者–debug-syms:只显示debug符号,会显示各种段,如bss段、data段等。
-A:打印是在符号前显示文件名
-D:只显示动态库符号(与位置无关)
用一个.so看看:
–defined-only:只显示已经定义了的符号
在动态库中使用:
在静态编译结果中使用:
-f或–format=FORMAT:规定输出的格式,FORMAT可以为bsd、sysv、和posix。默认为bsd
bsd格式:
posix格式:
sysv格式:
-g或者–extern-only:只显示extern符号
-l或者–line-numbers:显示符号所在的文件的位置(跟实用)
-n或者–numeric-sort:符号按照地址大小排列
**-o:和-A一致
-p或者–no-sort:不排列符号(默认)
-P或者–portability:和-f posix一致
-r:反向排序符号列表**
**–plugin NAME:加载特定的动态库
-S或者–print-size:打印出符号的大小**
–size-sort:按照符号大小排序(大小为0的不显示)
-t或者–radix=RADIX:按照指定进制显示符号地址:
其中d表10进制(默认)、x表示16进制、o表示八进制。
-u:显示没有定义的符号(重要)
参数
目标文件:二进制目标文件,通常是库文件和可执行文件。
显示结果字段按照如下第一行对号入座即可,注意默认格式按照符号地址、符号类型、符号名为一行。没有显示符号大小和符号段:
nm命令
nm命令用于显示二进制目标文件的符号表。
提示:由于一般情况下,应用用nm打印出来的符号比较多,不利于观看,这里就哪一个.o文件来演示
语法
nm (选项) (参数) 或者 nm (参数) (选项)
选项
不加参数:打印出二进制文件代码段的符号。
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o U __stack_chk_fail U createObject U createStringObject U decrRefCount 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags U ll2string 0000000000000250 T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen
-a或者–debug-syms:只显示debug符号,会显示各种段,如bss段、data段等。
0000000000000000 b .bss 0000000000000000 n .comment 0000000000000000 d .data 0000000000000000 N .debug_abbrev 0000000000000000 N .debug_aranges 0000000000000000 N .debug_info 0000000000000000 N .debug_line 0000000000000000 N .debug_loc 0000000000000000 N .debug_str 0000000000000000 r .eh_frame 0000000000000000 n .note.GNU-stack 0000000000000000 r .rodata 0000000000000000 r .rodata.str1.1 0000000000000000 t .text 0000000000000000 t .text.unlikely U __stack_chk_fail U createObject U createStringObject U decrRefCount 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags U ll2string 0000000000000000 a notify.c 0000000000000250 T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen
-A:打印是在符号前显示文件名
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm -A notify.o notify.o: U __stack_chk_fail notify.o: U createObject notify.o: U createStringObject notify.o: U decrRefCount notify.o:00000000000000b0 T keyspaceEventsFlagsToString notify.o:0000000000000000 T keyspaceEventsStringToFlags notify.o: U ll2string notify.o:0000000000000250 T notifyKeyspaceEvent notify.o: U pubsubPublishMessage notify.o: U sdscatlen notify.o: U sdscatsds notify.o: U sdsempty notify.o: U sdsnewlen notify.o: U server notify.o: U strlen
-D:只显示动态库符号(与位置无关)
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm -D notify.o nm: notify.o: no symbols
用一个.so看看:
root@68fc0a9bc6dd:/usr/lib# nm -D libau.so w _ITM_deregisterTMCloneTable w _ITM_registerTMCloneTable w _Jv_RegisterClasses 000000000020414c B __bss_start w __cxa_finalize U __errno_location U __fprintf_chk w __gmon_start__ U __stack_chk_fail U __xstat 000000000020414c D _edata 00000000002041f0 B _end 0000000000002a0c T _fini 00000000000011e0 T _init U calloc U close 0000000000001dce T closedir ...
–defined-only:只显示已经定义了的符号
在动态库中使用:
root@68fc0a9bc6dd:/usr/lib# nm --defined-only libau.so nm: libau.so: no symbols
在静态编译结果中使用:
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm --defined-only notify.o 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags 0000000000000250 T notifyKeyspaceEvent
-f或–format=FORMAT:规定输出的格式,FORMAT可以为bsd、sysv、和posix。默认为bsd
bsd格式:
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o U __stack_chk_fail U createObject U createStringObject U decrRefCount 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags U ll2string 0000000000000250 T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen
posix格式:
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o -f posix __stack_chk_fail U createObject U createStringObject U decrRefCount U keyspaceEventsFlagsToString T 00000000000000b0 0000000 10ffb 000000197 keyspaceEventsStringToFlags T 0000000000000000 00000000000000a6 ll2string U notifyKeyspaceEvent T 0000000000000250 00000000000001ce pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen U
sysv格式:
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o -f sysv Symbols from notify.o: Name Value Class Type Size Line Section __stack_chk_fail | | U | NOTYPE| | |*UND* createObject | | U | NOTYPE| | |*UND* createStringObject | | U | NOTYPE| | |*UND* decrRefCount | | U | NOTYPE| | |*UND* keyspaceEventsFlagsToString|00000000000000b0| T | FUNC|0000000000000197| |.text keyspaceEventsStringToFlags|0000000000000000| T | FUNC|00000000000000a6| |.text ll2string | | U | NOTYPE| | |*UND* notifyKeyspaceEvent |0000000000000250| T | FUNC|00000000000001ce| |.text pubsubPublishMessage| | U | NOTYPE| | |*UND* sdscatlen | | U | NOTYPE| | |*UND* sdscatsds | | U | NOTYPE| | |*UND* sdsempty | | U | NOTYPE| | |*UND* sdsnewlen | | U | NOTYPE| | |*UND* server | | U | NOTYPE| | |*UND* strlen | | U | NOTYPE| | |*UND*
-g或者–extern-only:只显示extern符号
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm -g notify.o U __stack_chk_fail U createObject U createStringObject U decrRefCount 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags U ll2string 0000000000000250 T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen
-l或者–line-numbers:显示符号所在的文件的位置(跟实用)
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm -l notify.o U __stack_chk_fail /home/wzm/redis-4.0.2/src/notify.c:130 U createObject /home/wzm/redis-4.0.2/src/notify.c:113 U createStringObject /home/wzm/redis-4.0.2/src/notify.c:104 U decrRefCount /home/wzm/redis-4.0.2/src/notify.c:129 00000000000000b0 T keyspaceEventsFlagsToString /home/wzm/redis-4.0.2/src/notify.c:67 0000000000000000 T keyspaceEventsStringToFlags /home/wzm/redis-4.0.2/src/notify.c:40 U ll2string /home/wzm/redis-4.0.2/src/notify.c:109 0000000000000250 T notifyKeyspaceEvent /home/wzm/redis-4.0.2/src/notify.c:95 U pubsubPublishMessage /home/wzm/redis-4.0.2/src/notify.c:114 U sdscatlen /home/wzm/redis-4.0.2/src/notify.c:83 U sdscatsds /home/wzm/redis-4.0.2/src/notify.c:112 U sdsempty /home/wzm/redis-4.0.2/src/notify.c:70 U sdsnewlen /home/wzm/redis-4.0.2/src/notify.c:108 U server /home/wzm/redis-4.0.2/src/notify.c:102 U strlen /home/wzm/redis-4.0.2/src/notify.c:104
-n或者–numeric-sort:符号按照地址大小排列
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm -n notify.o U __stack_chk_fail U createObject U createStringObject U decrRefCount U ll2string U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen 0000000000000000 T keyspaceEventsStringToFlags 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000250 T notifyKeyspaceEvent
**-o:和-A一致
-p或者–no-sort:不排列符号(默认)
-P或者–portability:和-f posix一致
-r:反向排序符号列表**
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm -r notify.o U strlen U server U sdsnewlen U sdsempty U sdscatsds U sdscatlen U pubsubPublishMessage 0000000000000250 T notifyKeyspaceEvent U ll2string 0000000000000000 T keyspaceEventsStringToFlags 00000000000000b0 T keyspaceEventsFlagsToString U decrRefCount U createStringObject U createObject U __stack_chk_fail root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o U __stack_chk_fail U createObject U createStringObject U decrRefCount 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags U ll2string 0000000000000250 T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen
**–plugin NAME:加载特定的动态库
-S或者–print-size:打印出符号的大小**
0000000000000000 00000000000000a6 T keyspaceEventsStringToFlags U ll2string 0000000000000250 00000000000001ce T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o U __stack_chk_fail U createObject U createStringObject U decrRefCount 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags U ll2string 0000000000000250 T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen
–size-sort:按照符号大小排序(大小为0的不显示)
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o --size-sort 00000000000000a6 T keyspaceEventsStringToFlags 0000000000000197 T keyspaceEventsFlagsToString 00000000000001ce T notifyKeyspaceEvent
-t或者–radix=RADIX:按照指定进制显示符号地址:
其中d表10进制(默认)、x表示16进制、o表示八进制。
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o -t d U __stack_chk_fail U createObject U createStringObject U decrRefCount 0000000000000176 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags U ll2string 0000000000000592 T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o -t x U __stack_chk_fail U createObject U createStringObject U decrRefCount 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags U ll2string 0000000000000250 T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen
-u:显示没有定义的符号(重要)
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm -u notify.o U __stack_chk_fail U createObject U createStringObject U decrRefCount U ll2string U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o U __stack_chk_fail U createObject U createStringObject U decrRefCount 00000000000000b0 T keyspaceEventsFlagsToString 0000000000000000 T keyspaceEventsStringToFlags U ll2string 0000000000000250 T notifyKeyspaceEvent U pubsubPublishMessage U sdscatlen U sdscatsds U sdsempty U sdsnewlen U server U strlen
参数
目标文件:二进制目标文件,通常是库文件和可执行文件。
显示结果字段按照如下第一行对号入座即可,注意默认格式按照符号地址、符号类型、符号名为一行。没有显示符号大小和符号段:
root@68fc0a9bc6dd:/home/wzm/redis-4.0.2/src# nm notify.o -f sysv Symbols from notify.o: Name Value Class Type Size Line Section __stack_chk_fail | | U | NOTYPE| | |*UND* createObject | | U | NOTYPE| | |*UND* createStringObject | | U | NOTYPE| | |*UND* decrRefCount | | U | NOTYPE| | |*UND* keyspaceEventsFlagsToString|00000000000000b0| T | FUNC|0000000000000197| |.text keyspaceEventsStringToFlags|0000000000000000| T | FUNC|00000000000000a6| |.text
相关文章推荐
- 每天回顾linux命令(dirname)
- 每天回顾linux命令(wc)
- 每天回顾linux命令(umask)
- 每天回顾linux命令(reboot)
- 每天回顾linux命令(iotop)
- 每天回顾linux命令(time)
- 每天回顾linux命令(date)
- 每天回顾linux命令(du)
- 每天回顾linux命令(which)
- 每天回顾linux命令(whereis)
- 每天回顾linux命令(df)
- 每天回顾linux命令(ldd)
- 每天回顾linux命令(diff)
- 每天回顾linux命令(nice)
- 每天回顾linux命令(uniq)
- 每天回顾linux命令(zcat)
- 每天回顾linux命令(users)
- 每天回顾linux命令(touch)
- 每天回顾linux命令(renice)
- 每天回顾linux命令(top)