使用nm命令获取linux的可执行文件里或动态库中的所有函数名称

本文主要是介绍使用nm命令获取linux的可执行文件里或动态库中的所有函数名称,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一   使用nm命令获取动态库的符号(获取生成的动态库.so文件里面的所有函数名称)

执行 nm -s helloworld

二 使用nm命令获取可执行文件里的符号(获取生成的执行文件里面的所有函数名称)

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 命令使用以下符号(用同样的字符表示弱符号作为全局符号)之一来表示文件符号类型:

  • 符号类型有以下几类,小写表示局部,大写表示全局

    A

    符号的值不会在连接时发生改变,是固定的

    b\B

    符号在未初始化数据段(BSS)

    C

    The symbol is common. Common symbols are uninitialized data. When linking, multiple common symbols may appear with the same name. If the symbol is defined anywhere, the common symbols are treated as undefined references.

    D\d

    符号在初始化的数据段里(.data)

    G\g

    符号在初始化的数据段里(small objects),个别的允许小数据的目标文件

    N

    符号是调试符号

    p

    符号在stack unwind段里

    R\r

    符号在只读数据段里

    S\s

    符号在未初始化的数据段里(for small objects)

    T\t

    符号在代码(text)段(code)

    U

    符号未定义

    u

    符号是一个唯一的全局符号

  • 大小

    如果可应用,nm 命令报告与符号有关的大小。

nm命令的用途:

1  主要查看可执行文件里有没有指定的符号

格式 nm -C 可执行文件 | grep 符号

如nm -C helloworld | grep hello1 

 

 

2  解决程序编译时undefined reference的错误及mutiple definition

 

3  查看某个符号的地址,以及进程空间的大概位置bss、data、text区,具体可以通过第二列的类型来判断。

这篇关于使用nm命令获取linux的可执行文件里或动态库中的所有函数名称的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/760522

相关文章

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五