grep与nm命令的应用

news/2024/5/2 5:58:07/文章来源:https://blog.csdn.net/qq_34647388/article/details/129249005
  1. 相关知识拓展
    1. Linux中grep的命令使用

在Linux中,grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。利用这些返回值就可以进行一些自动化的文本处理工具。grep命令的语法如下:

grep 参数<配置> 文件/文件夹

其中参数定义如下:

(1)-a:不忽略二进制的数据。

(2)-b:打印匹配行距离文件头部的偏移量,以字节为单位。

例:grep -r -b vendor_ai_cust_set_next_process_mctrl --exclude-dir=.svn

4-1 grep -b示例

(3)-c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数,比如一行有两个被匹配到,但输出只有一个。

例:grep -r -c vendor_ai_cust_set_next_process_mctrl

4-2 grep -c示例

(4)-E:将样式为延伸的正则表达式来使用,如匹配文件中多个字符。

4-3 grep -E示例

(5)-F:将样式视为固定字符串的列表,字符串中可以有特殊符号,例如{}、[]等。

4-4 grep -F示例

(6)-G:使用基本规则表达式解释匹配模式,该参数为默认值。

(7)-h:查询时不显示文件名。

4-5 grep -h示例

(8)-H:查询时显示文件名,加与不加无区别,与-h相反。

(9)-i:忽略关键字符的大小写。(跟-y参数相同)。

(10)-l:对多文件搜索关键字符时只显示文件名。

(11)-L:对多文件搜索关键字符时,只显示不匹配关键字符的文件名。

(12)-n:显示匹配结果所在行号。

(13)-q:不显示任何信息。用于if逻辑判断,安静模式,不打印任何标准输出。如果有匹配的内容则立即返回状态值0。

4-6 grep -q示例

(14)-d 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。-d后面跟的是进行的动作,一般是"grep -d read"或"grep -d recure "或"grep -d skip"。其中,read 为在当前目录查找;recure 为所有递归子目录;skip 为忽略子目录

(15)-R/-r 此参数的效果和指定"-d recurse"参数相同。

(16)-s 当搜索关键字符,不显示不存在或无匹配文本的错误信息。使用方式:"grep -s 关键字符 filename"。

4-7 grep -s示例

(17)-v 反转或过滤搜索,即过滤出来那些不匹配关键字符的行。使用方式:"grep -v 关键字符"。

(18)-w 精准搜索关键字符,即,只匹配单词,不匹配字符串。

4-8 grep -w示例

(19)-x 只显示整行都是关键字符的行。使用方式:"grep -x 关键字符",行匹配。

(20)-y 忽略关键字符的大小写。(跟-i参数相同)。

(21)-A<行数>:在输出的时候包含结果所在行之后的指定行数,这里指之后的x行。

(22)-B<行数>:在输出的时候包含结果所在行之前的指定行数,这里指之前的x行。

(23)-C<行数>:在输出的时候包含结果所在行之前和之后的指定行数,这里指之前和之后的x行。

4-9 grep -C示例

(24) -e 一次只能传一个匹配值,想对于-E,-E则可以采用“|”进行查询。

4-10 grep -e示例

(25)-f 从文件中取得关键字符,以文件匹配文件。

例:grep -f b.txt a.txt  以b.txt每一行为元素,在a.txt中进行匹配,如过行元素相同,则会标红,如下图所示。

4-11 grep -f示例

(26)--exclude-from = FILE:在文件中编写通配方案,grep将不会到匹配方案中文件名的文件去查找匹配内容。

(27)--exclude-dir = DIR:匹配一个目录下的不少内容同时还要让一些子目录不接受匹配,就使用此选项。

(28)--include = GLOB:仅搜索其基本名称与GLOB匹配的文件(使用--exclude下所述的通配符匹配)。

    1. Linux中nm的命令使用

nm命令的语法如下所示:

$ nm [options(s)] [file(s)]

其中,[file(s)]中可以给出多个文件,如果没有指定文件名,则默认文件是a.out。

(1)-A/-o:在输出时加上文件名。

4-12 nm -A/-o示例

(2)-a:列出obj文件中所有的符号,包括debug所使用的符号,否则默认情况下不显示调试用的符号。

4-13 nm -a示例

(3)-B:BSD码显示,默认为8421码显示。

(4)-C或--demangle[=style]:对低级符号名称进行解码,C++文件需要添加。

(5)-D 或--dynamic:显示动态符号而不显示普通符号,一般用于动态库。

(6)-f format或--format=format:指定输出格式,可以使用 nm -f sysv 查看变量所在的节区。

4-14 nm -f 示例

(7)-g或--extern-only:仅显示外部符号,一般用于对静态库的函数查询。

4-15 nm -g示例

(8)-h或--help:国际惯例,显示命令的帮助信息。

(9)-n或-v或--numeric-sort:显示的符号以地址排序,而不是名称排序。

例:nm -g -n libvendor_ai2_pub.a

 

4-16 nm -n示例                4-17 nm不加-n对比示例

(10)-p或--no-sort:不对显示内容进行排序。

 

4-18 nm -p示例                   4-19 nm不加-p示例

(11)-P或--portability:按照POSIX2.0标准格式输出,等同于使用 -f posix。

4-20 nm -P示例

(12)-V或--version:国际管理,查看nm的版本。

4-21 nm -V示例

(13)-s:当列出库中成员的符号时,包含索引。索引的内容包含:哪些模块包含哪些名字的映射。

(14)-u: 只显示未定义的符号。

4-22 nm - u示例

在执行nm指令之后,显示的符号代表如下:

4-1 nm命令显示符号相关说明

符号

描述

A

符号的值是绝对值,不会通过进一步的链接而改变。

B/b

符号在 BSS 数据段中。通常包含零初始化或未初始化的数据。

C

未初始化的数据。如果符号在任何地方定义,则被视为未定义的引用。

D/d

符号在初始化数据段中。

G/g

符号在小对象的初始化数据段中。一些目标文件格式允许更有效地访问小型数据对象,例如全局int变量,而不是大型全局数组。

i

对于PE格式文件,这表示符号位于特定于实现的部分中 DLL。对于ELF格式文件,这表明该符号是一个间接函数。这是一个GNU对标准ELF 符号类型集的扩展。它表示一个符号,如果被一个重定位不计算其地址,而是必须在运行时调用。运行时然后执行将返回要在重定位中使用的值。

I

该符号是对另一个符号的间接引用。

N

该符号是调试符号。

n

符号在只读数据段中。

p

符号在堆栈展开部分中。

R/r

该符号位于只读数据段中。

S/s

该符号在小对象的未初始化或零初始化数据段中。

T/t

符号在文本(代码)部分。

U

符号未定义。

a

本地不可变符号,通常为文件名

  1. 总结

(1)在代码编译阶段,遇到缺少相关的函数定义时,可以从函数是否未声明、定义函数的代码文件、相关库函数的添加方面着手,一一排查。

(2)grep的常用命令

5-1 grep常用命令

命令

描述

grep -n

显示行号

grep -l

只显示文件名

grep -E “条件a | 条件b | …”

多条件的搜索(可采用“条件a|条件b“”)

grep -x

按行进行匹配

grep -r

递归的查找目录

(3)nm的常用命令

5-2 nm常用命令

命令

描述

nm -g

静态库、可执行文件、中间文件相关函数查询

nm -f sysv

输出变量所在的区

nm -D

动态库中的函数查询

nm -A

输出时加上文件名

nm -a

输出所有符号,包含debug符号

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74951.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工程机械焊接件焊接结构件三维扫描检测外观质量控制-CASAIM三维扫描检测仪

焊接已发展为制造业中的一种重要的加工方法&#xff0c;广泛应用于航空、航天、冶金、石油、汽车制造以及国防等领域。工程机械焊接件品种繁多、几何形状复杂&#xff0c;焊接件质量的好坏将直接影响到产品的使用寿命长短。对焊缝表面尺寸测量及评定表面焊缝缺陷时&#xff0c;…

叠氮试剂79598-53-1,6-Azidohexanoic Acid,6-叠氮基己酸,末端羧酸可与伯胺基反应

●中文名&#xff1a;6-叠氮基己酸●英文名&#xff1a;6-Azidohexanoic Acid&#xff0c;6-Azidohexanoic COOH●外观以及性质&#xff1a;西安凯新生物科技有限公司供应的6-Azidohexanoic Acid浅黄色或者无色油状&#xff0c;叠氮化物可使用铜催化的Click化学与末端炔烃共轭&…

一文了解 requestAnimationFrame

requestAnimationFrame 的基本使用 requestAnimationFrame 是什么 window.requestAnimationFrame() 告诉浏览器——你希望执行一个动画&#xff0c;并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。该方法需要传入一个回调函数作为参数&#xff0c;该回调函数会在浏…

腾讯前端二面常考vue面试题(附答案)

虚拟DOM真的比真实DOM性能好吗 首次渲染大量DOM时&#xff0c;由于多了一层虚拟DOM的计算&#xff0c;会比innerHTML插入慢。正如它能保证性能下限&#xff0c;在真实DOM操作的时候进行针对性的优化时&#xff0c;还是更快的。 MVVM的优缺点? 优点: 分离视图&#xff08;V…

MK60DX256VLQ10(256KB)MK60DN256VLQ10 Kinetis K60 MCU FLASH

MK60DX256VLQ10(256KB)MK60DN256VLQ10 Kinetis K60 MCU 32BIT 256KB FLASH 144LQFP【说明】Kinetis K6x MCU系列是一个可扩展的组合&#xff0c;具有不同级别的集成&#xff0c;提供丰富的模拟、通信、定时和控制外设套件&#xff0c;以适应广泛的需求。应用楼宇自动化控制器人…

数仓基础与hive入门

目录1、数仓数据仓库主流开发语言--SQL2、Apache Hive入门2.1 hive定义2.2 为什么使用Hive2.3 Hive和Hadoop关系2.4 场景设计&#xff1a;如何模拟实现Hive功能2.5 Apache Hive架构、组件3、Apache Hive安装部署3.1 metastore配置方式4、Hive SQL语言&#xff1a;DDL建库、建表…

【谷歌grc】recaptcha browser-error 错误

grc 谷歌人机验证错误 https://www.google.com/recaptcha/api/siteverif 返回错误信息 browser-error [{"success": false,"error-codes": ["browser-error"] }]之前都是调通能用的&#xff0c;突然之间就不能用了&#xff0c;查了半天也没有找…

蓝库云|什么是供应链管理?SCM对制造业的重要性

企业在产品的销售经营上&#xff0c;往往不会考量到供应链管理(SCM)的流程规划&#xff0c;但现今的商业环境与以往不同&#xff0c;高度竞争与客户不断提升的期望&#xff0c;藉由做好供应链管理(SCM)&#xff0c;才能更准时的提供优质产品与优良服务&#xff0c;增强企业竞争…

Qt 小项目 图片浏览系统

目录 引言 实现功能&#xff1a; 效果&#xff1a; 实现图片浏览所用知识: 实现流程&#xff1a; 实现环境和UI设计 具体实现 引言 本系统支持&#xff0c;自动播放&#xff0c;左右拖动切换&#xff0c;点击列表切换&#xff0c;点击按钮切换&#xff1b;是一个标准的…

职场性别报告,男女薪酬仍有差距,男性平均薪酬比女性高29.7%

性别是否影响职业&#xff1f;女性求职比男性更加困难&#xff1f;男性薪酬比女性更有优势&#xff1f;人们一说到警察、建筑师通常会想到高大魁梧的男性形象&#xff0c;一说到幼师、护士往往想到的都是温柔的女性形象&#xff0c;职业好似与性别挂钩&#xff1b;女性求职通常…

vue脚手架多页自动化生成实践

前言 在前端开发过程中&#xff0c;常常面对多种业务场景。到目前为止&#xff0c;前端对于不同场景的处理通常会采用不同的渲染方案来组合处理&#xff0c;常见的渲染方案包括&#xff1a;CSR(Client Side Rendering)、SSR(Server Side Rendering)、SSG(Static Site Generati…

LVGL8.3 集成 ST7789V 显示驱动和 CST816T 触摸屏驱动

LVGL8.3 集成 ST7789V 显示驱动和 CTS816S 触摸屏驱动起因效果&#xff08;正常显示&#xff0c;触摸屏可调换X&#xff0c;Y轴&#xff09;使用方式前提操作步骤最后参考起因 LVGL的ESP32 Drivers库中已经包含了大多数显示和触摸芯片的驱动&#xff0c;基本上只需要在MenuCon…

一些无线通信系统模型的概念

一些无线通信系统模型的概念 扩频通信,指的是系统的带宽WWW远大于其信息传输速率R(bits/s)R(bits/s)R(bits/s), 定义展频带因子BeWRB_e \frac{W}{R}Be​RW​, 易知在扩频通信系统中,BeB_eBe​远大于1. 在频率上产生如此大的冗余度,主要是为了减轻无线通信或卫星通信中经常产生…

SpringMVC——响应处理(1)【包含源码分析】

Controller public class JsonReturnController {ResponseBodyGetMapping("/getPet")public Pet getPet(){Pet petnew Pet();pet.setAge(5);pet.setName("lily");return pet;} }项目启动后 浏览器输入 http://localhost:8080/getPet 。 debug DispatcherS…

设备驱动模型--存储技术原理分析笔记 基于2.6.43内核

本文为读书笔记&#xff0c;详细内容参考《存储原理技术分析》1- 驱动模型2- 总线类型2.1- 重要数据结构总线bus_type 和 bus_type_private 互相可以找到对方struct bus_type {const char *name;struct bus_attribute *bus_attrs;struct device_attribute *dev_attrs;s…

BPMN2.0是什么,BPMN能解决企业流程管理中哪些问题?

一、前言&#xff1a; 在任何行业和企业中&#xff0c;一定存在着各式各样的流程&#xff0c;请假流程、报销流程、入职流程、离职流程、出差流程、合同审批流程、出入库流程等等…… 无论是管理者、技术人员还是业务人员&#xff0c;每天肯定也在使用各种流程&#xff0c;但…

Spring彻头彻尾的讲解,按照Spring框架启动流程,逐步剖析问题,不再是大杂烩!

文章目录1. 定义Spring Bean篇1.1 定义Spring Bean的几种方式1.1.1 XML文件定义Spring Bean1.1.2 JavaConfig定义Spring Bean1.1.3 Component注解定义SpringBean1.2 装配Spring Bean的四种常用方式1.2.1 手动装配 XML文件1.2.2 自动装配 XML文件1.2.3 手动装配 JavaConfig文…

C++常见类型及占用内存表

GPS生产厂家在定义数据的时候都会有一定的数据类型&#xff0c;例如double、int、float等&#xff0c;我们知道它们在内存中都对应了一定的字节大小&#xff0c;而我在实际使用时涉及到了端序的问题&#xff08;大端序高字节在前&#xff0c;小端序低字节在前&#xff09;&…

【ICCV2022】 CAPAO:一种高效的单阶段人体姿态估计模型

CAPAO&#xff1a;一种高效的单阶段人体姿态估计模型 重新思考关键点表示&#xff1a;将关键点和姿态建模作为多人姿态估计的对象&#xff08;Rethinking Keypoint Representations: Modeling Keypoints and Poses as Objects for Multi-Person Human Pose Estimation&#xf…

《数据库系统概论》学习笔记——第四章 数据库安全

教材为数据库系统概论第五版&#xff08;王珊&#xff09; 这一章简单记一下那几条sql的用法和两种存取控制和审计&#xff08;今年期末考了&#xff09;吧&#xff0c;不知道有啥好考的 数据库安全性 问题的提出 数据库的一大特点是数据可以共享数据共享必然带来数据库的安全…