使用nm命令获取可执行文件里的符号
2017-03-19 11:45
726 查看
linux的nm命令可以获取可执行文件里的符号表。
如可执行文件helloworld,
执行 nm helloworld
root@ubuntu:/share/learn#
root@ubuntu:/share/learn# nm helloworld
0804a024 B __bss_start
0804a024 b completed.7181
0804a018 D __data_start
0804a018 W data_start
08048360 t deregister_tm_clones
080483d0 t __do_global_dtors_aux
08049f0c t __do_global_dtors_aux_fini_array_entry
0804a01c D __dso_handle
08049f14 d _DYNAMIC
0804a024 D _edata
0804a028 B _end
08048504 T _fini
08048518 R _fp_hw
080483f0 t frame_dummy
08049f08 t __frame_dummy_init_array_entry
080486bc r __FRAME_END__
0804a000 d _GLOBAL_OFFSET_TABLE_
w __gmon_start__
0804841b T hello1_print
08048473 T hello2_print
080482b0 T _init
08049f0c t __init_array_end
08049f08 t __init_array_start
0804851c R _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
08049f10 d __JCR_END__
08049f10 d __JCR_LIST__
w _Jv_RegisterClasses
08048500 T __libc_csu_fini
080484a0 T __libc_csu_init
U __libc_start_main@@GLIBC_2.0
0804844a T main
U puts@@GLIBC_2.0
08048390 t register_tm_clones
0804a020 D s
08048320 T _start
0804a024 D __TMC_END__
08048446 T __x86.get_pc_thunk.ax
08048350 T __x86.get_pc_thunk.bx
root@ubuntu:/share/learn#
如0804841b T hello1_print
第一列是当前符号的地址,第二列是当前符号的类型,第三列是当前符号的名称。
nm加上-C指定列出符号是demangle,可以使得结果更加易读,但本人测试C的代码,加上-C跟没加是一样的结果。
nm命令的用途:
1 主要查看可执行文件里有没有指定的符号
格式 nm -C 可执行文件 | grep 符号
如nm -C helloworld | grep hello1
2 解决程序编译时undefined reference的错误及mutiple definition
3 查看某个符号的地址,以及进程空间的大概位置bss、data、text区,具体可以通过第二列的类型来判断。
如可执行文件helloworld,
执行 nm helloworld
root@ubuntu:/share/learn#
root@ubuntu:/share/learn# nm helloworld
0804a024 B __bss_start
0804a024 b completed.7181
0804a018 D __data_start
0804a018 W data_start
08048360 t deregister_tm_clones
080483d0 t __do_global_dtors_aux
08049f0c t __do_global_dtors_aux_fini_array_entry
0804a01c D __dso_handle
08049f14 d _DYNAMIC
0804a024 D _edata
0804a028 B _end
08048504 T _fini
08048518 R _fp_hw
080483f0 t frame_dummy
08049f08 t __frame_dummy_init_array_entry
080486bc r __FRAME_END__
0804a000 d _GLOBAL_OFFSET_TABLE_
w __gmon_start__
0804841b T hello1_print
08048473 T hello2_print
080482b0 T _init
08049f0c t __init_array_end
08049f08 t __init_array_start
0804851c R _IO_stdin_used
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
08049f10 d __JCR_END__
08049f10 d __JCR_LIST__
w _Jv_RegisterClasses
08048500 T __libc_csu_fini
080484a0 T __libc_csu_init
U __libc_start_main@@GLIBC_2.0
0804844a T main
U puts@@GLIBC_2.0
08048390 t register_tm_clones
0804a020 D s
08048320 T _start
0804a024 D __TMC_END__
08048446 T __x86.get_pc_thunk.ax
08048350 T __x86.get_pc_thunk.bx
root@ubuntu:/share/learn#
如0804841b T hello1_print
第一列是当前符号的地址,第二列是当前符号的类型,第三列是当前符号的名称。
nm加上-C指定列出符号是demangle,可以使得结果更加易读,但本人测试C的代码,加上-C跟没加是一样的结果。
nm命令的用途:
1 主要查看可执行文件里有没有指定的符号
格式 nm -C 可执行文件 | grep 符号
如nm -C helloworld | grep hello1
2 解决程序编译时undefined reference的错误及mutiple definition
3 查看某个符号的地址,以及进程空间的大概位置bss、data、text区,具体可以通过第二列的类型来判断。
相关文章推荐
- Mac平台下使用nm命令查看文件的符号表
- bat文件中使用DOS命令如何截取字符串&如何执行“字符串命令”&获取文件文件内容并赋值给变量
- 使用ant的exec命令来调用 make命令执行makefile文件
- 使用vim在文件中插入命令执行的输出结果
- java中使用JSCH包,SFTP及SSH2文件操作及远程命令执行
- 【零碎JAVA】使用jar命令创建可执行的jar文件
- nm命令查看对象,可执行及库文件
- 使用 Microsoft Symbol Server 获取调试符号文件
- ELF格式文件符号表全解析及readelf命令使用方法
- Windows下通过SSH使用SharpSSH远程登录主机执行命令传输文件
- java中使用JSCH包,SFTP及SSH2文件操作及远程命令执行(改进)
- Android使用Linux命令执行文件操作
- nm命令查看库文件的符号
- java中使用JSCH包,SFTP及SSH2文件操作及远程命令执行
- 数据库操作_连接SQL Server数据库示例;连接ACCESS数据库;连接到 Oracle 数据库示例;SqlCommand 执行SQL命令示例;SqlDataReader 读取数据示例;使用DataAdapter填充数据到DataSet;使用DataTable存储数据库表;将数据库数据填充到 XML 文件;10 使用带输入参数的存储过程;11 使用带输入、输出参数的存储过程示;12 获得数据库中表的数目和名称;13 保存图片到SQL Server数据库示例;14 获得插入记录标识号;Exce
- 使用 Microsoft Symbol Server 获取调试符号文件
- linux使用time命令获取命令执行时间
- 在Linux下获取当前运行程序可执行文件全路径(不使用real_path()函数)
- ELF格式文件符号表全解析及readelf命令使用方法
- 使用SymChk获取符号文件