Linux中使用nm和grep技巧 (linux nm grep)

Linux是许多程序员喜欢使用的操作系统之一,因为它提供了许多强大的工具来帮助程序员进行工作。其中两个在调试和分析二进制文件时非常有用的工具是nm和grep。本文将介绍如何在Linux中使用这两个工具。

一、什么是nm

nm是Linux上查看目标文件或可执行文件中符号表的命令。符号表是一个列表,其中包含所有全局变量、函数、类、结构体和其他代码实体的名称和地址。nm命令提供了各种选项,以过滤输出并仅显示您感兴趣的符号。以下是一些常见的选项:

1. -A:显示所有符号,包括本地符号。

2. -g:仅显示全局符号。

3. -D:仅显示动态符号。

4. -t :指定输出格式。可用格式包括sysv、bsd、posix和darwin。

nm命令的输出格式可能有所不同,取决于您使用的选项和文件类型。无论如何,您将会看到一个列表,其中包含所选文件中涉及的所有全局符号。该列表通常按字母顺序排列,并包含每个符号的类型和地址。

为了更好地理解nm的输出及其含义,我们来尝试一下:

在Linux终端中,我们创建了一个新的C文件,以及一个名为“test”的可执行文件。该C文件包含了一个简单的打印语句和一个全局整数变量:

“`

#include

int global_int = 32;

void print_message() {

printf(“Hello, World!\n”);

}

int mn() {

print_message();

printf(“The value of global_int is %d.\n”, global_int);

return 0;

}

“`

要查看“test”可执行文件中的符号表,您可以使用以下命令:`nm test`。输出的结果如下:

“`

0000000000004010 T mn

0000000000004027 T print_message

0000000000601028 D global_int

0000000000400b20 r __FRAME_END__

0000000000601028 B __bss_start

0000000000601028 b completed.6527

0000000000601018 b dtor_idx.6529

0000000000400900 t deregister_tm_clones

0000000000400990 t register_tm_clones

00000000004009d0 t __do_global_dtors_aux

0000000000600e48 t frame_dummy

0000000000601000 t __do_global_ctors_aux

00000000004008c0 t _init

0000000000400b30 R _IO_stdin_used

“`

您可以看到有三个符号被列出:`mn`、`print_message`和`global_int`。其中,`mn`和`print_message`是C文件中定义的函数的名称,`global_int`是C文件中定义的全局变量的名称。如果您仔细看,您可能会注意到“global_int”前面有一个“D”字母,表示这是一个定义符号(也称为数据符号),而“mn”和“print_message”前面有一个“T”字母,表示这是一个文本符号(也称为代码符号)。

二、什么是grep

grep是一种Linux命令,用于在文件中查找字符串匹配项。grep非常灵活,可以使用各种选项以不同的方式搜索匹配项。以下是一些常见的选项:

1. -i:不区分大小写地搜索。

2. -n:显示行号。

3. -r:在目录及其子目录中递归搜索。

4. -v:仅显示未匹配的行。

5. -w:仅匹配完全匹配的单词。

grep命令可以与其他命令一起使用,以便将输出重定向到另一个文件或进一步处理。grep也可以使用正则表达式,以便更精细地匹配需要搜索的文本。以下是一些常见的正则表达式符号:

1. ^:表示以什么开头。

2. $:表示以什么结尾。

3. +:表示出现一次或多次。

4. *:表示出现任意次。

5. [ ]:表示范围。

为了更好地理解grep和它的使用,我们来演示一下:

我们将使用grep和nm命令一起查找特定符号名称。在上面的例子中,我们已经知道了三个符号的名称:“mn”、“print_message”和“global_int”。但是在实际开发过程中,通常会遇到更复杂的符号名称。例如,想象一下您正在尝试解决一个系统崩溃问题,并且需要找到涉及特定函数名的所有可执行文件。在这种情况下,grep可以派上用场。

要查找所有可执行文件中包含特定函数名的文件,您可以使用以下命令:

“`

find / -type f -perm +111 -exec nm {} \; | grep -w ‘print_message’

“`

该命令将运行一个Linux命令`find`,该命令将在文件系统中查找所有具有可执行权限(即`-perm +111`)的文件。然后它将此文件列表重定向到nm命令中,该命令将为每个文件生成符号表输出。grep命令将搜索nm输出以查找包含单词“print_message”的行。

该命令的输出将是一组在含有函数“print_message”可执行文件中找到的行,格式类似于这种:

“`

/path/to/executable:0000000000004027 T print_message

“`

这个输出告诉我们,函数打印语句“Hello, World!”的代码位于“/path/to/executable”可执行文件中的地址4027处。

三、结论

相关问题拓展阅读:

  • linux中“grep”和“find”的区别是什么?

linux中“grep”和“find”的区别是什么?

这是两个不同的命令,关于grep:

Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

而linux下的find

功能:在目录结构中搜索文件,并执行指定的操作。此命令提供了相当多的查找条件,功能很强大。 

语法:find 起始目录 寻找条件 操作 

说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。

所以芦毕简单点说说,grep是查找匹配条件的行,find是搜索匹配条件的文件。

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的蠢银设计思想,是一个性能稳定的多用户网络操作系统。

Linux操作系统诞生于1991 年10 月5 日(这是之一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们带哗宴都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。

严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。

关于linux nm grep的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

香港服务器首选树叶云,2H2G首月10元开通。
树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云服务器和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/184485.html<

(0)
管理的头像管理
上一篇2025-03-28 21:58
下一篇 2025-03-28 21:59

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注