GNU工具链

1. GNU介绍

工具链典型的例子就是GNU工具链。

GNU工具链是由GNU项目产生的各种编程工具的集合,用于开发应用程序与操作系统。
GNU工具链在针对嵌入式系统的Linux内核、BSD及其它软件的开发中起着至关重要的作用。
GNU工具链中的部分工具也被Mac OS X, Microsoft Windows等其它平台进行了移植使用。

GNU工具链中包含的项目有:
GNU make:用于编译和构建的自动工具。
GNU编译器集合(GCC):一组多种编程语言的编译器。
GNU Binutils:包含链接器ld、汇编器as和其它工具的工具集。
GNU Debugger(GDB):代码调试工具。
GNU构建系统(autotools):Autoconf、Autoheader、Automake、Libtool。

2. binutils工具集—GNU binutils工具集简介

GNU binutils是一个二进制工具集,主要包括:
ld,GNU链接器。
as,GNU汇编器。
addr2line,把地址转化为文件名和行号。
nm,列出目标文件的符号列表。
objdump,显示目标文件信息。
readelf,显示elf格式的文件信息。
objcopy,拷贝部分section以生成新的可执行文件,如elf->hex、elf->bin等。
ar,创建、修改、解压一个静态库文件。
size,显示目标文件的节大小。
strings,从目标文件中列出可打印的字符串。
c++filt,过滤c++符号为可识别的c符号。
ranlib,生成库文件中的.o文件索引。
strip,丢弃程序文件中的符号信息。

2.1 binutils工具集—objdump的用法

objdump主要用来显示目标文件的内容。
这里的显示,是指将二进制的文件内容反汇编形成汇编代码,因此“显示”约等同于“反汇编”。

使用objdump工具反汇编的原因:
(1)逆向破解。将可执行程序反汇编得到汇编代码,再根据汇编代码推理出整个程序的逻辑。这个不是一般人能做的,能看懂大量汇编语言写的程序都很困难了,更别说反推别人的代码逻辑。
(2)调试程序。反汇编调试可以帮助我们理解并检测生成的可执行程序是否正常,尤其是在理解链接脚本和链接地址等概念时。
(3)C语言的源代码编译链接生成的可执行文件再反汇编,可以帮助我们理解C语言和汇编语言的对应关系,有助于深入理解C语言。

通过man手册,可知该工具的使用格式如下。
objdump [options] obj_file #[]表示可选,obj_file表示目标文件

objdump工具支持很多选项,这里仅列出一些常用的选项。
在这里插入图片描述

2.2 5.4.binutils工具集—objcopy的用法

objcopy主要用来转换目标文件的格式。
在实际开发中,我们会用该工具进行格式转换与内容删除。
(1)在链接完成后,将elf格式的.out文件转化为bin格式的文件。
#复制:将可执行程序test_adr.elf从一种二进制格式(elf)转换成另外一种二进制格式(bin)
arm-linux-objcopy -O binary -S test_adr.elf test_adr.bin
(2)(通过-g、-S等选项)删除文件正常运行时不需要的内容,比如符号表、重定位表、调试信息等。裁剪后其体积比原来小很多,可以节省flash资源。当flash空间不足时,我们可以先查看文件中是否存在运行时非必需的内容,并利用objcopy工具删除。
arm-linux-objcopy -g -S -O elf32-littlearm test_adr.elf test_adr2.elf
#或者写成
arm-linux-objcopy -g -S test_adr.elf -O elf32-littlearm test_adr2.elf

通过man手册,可知该工具使用格式如下。
objcopy [options] infile [outfile] #[]表示该项是可选的

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【C++】类和对象一

今天来到了类和对象部分,我们知道C语言是面向过程编程,而C是面向对象编程,那么怎么个具体实现方法呢?简单来说,就是C语言对结构体的定义和对结构体的操作是分开的,这样就显得过程很独立;而C是把…

windows11记事本应用程序无法打开,未响应,崩溃,卡死

windows11记事本应用程序无法打开,未响应,崩溃,卡死 文章目录 问题描述搜索引擎(度娘)卸载后如何安装问题未解决另一个解决方案:步骤:1.设置 → 语音和区域 → 输入2.选择“高级键盘设置”3.替…

LeetCode - 622. 设计循环队列(C语言,顺序存储结构,配图)

目录 ​编辑定义结构体: 1. MyCircularQueue(k): 构造器,设置队列长度为 k 2. Front: 从队首获取元素。如果队列为空,返回 -1 3. Rear: 获取队尾元素。如果队列为空,返回 -1 4. enQueue(value): 向循环队列插入一个元素。…

基于springboot实现在线外卖平台系统项目【项目源码】

基于springboot实现在线外卖平台管理系统演示 Java技术 Java是由SUN公司推出,该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称,也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备了显著的…

运动耳机哪个牌子好?盘点最值得入手的五款运动耳机

现在,不入耳的运动耳机成了许多运动爱好者的首选,我也不例外,不得不说骨传导耳机跟运动真的很搭,不仅佩戴稳固不掉落,而且防水好,可以说是最值得入手的运动耳机,为了避免大家在选购运动耳机的时…

电脑磁盘怎么设置密码?磁盘加密软件哪个好?

电脑磁盘经常被用于存放各种重要数据,而为了避免数据泄露,我们需要为磁盘设置密码,以防止未授权人员使用磁盘。那么,电脑磁盘怎么设置密码呢?下面我们就一起来了解一下。 如何设置磁盘密码? 想要为磁盘设置…

计算机毕业设计项目选题推荐(免费领源码)java+springboot+mysql社区团购APP 02043

目录 摘要 1 绪论 1.1 研究背景 1.2国内外研究现状 1.3本课题主要工作 1.4论文结构与章节安排 2 社区团购系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.…

简于外 强于内,联想全新ThinkCentre M90a Pro Gen4以强劲性能开启商

近日,联想发布了最新一代商用台式一体机联想ThinkCentre M90a Pro Gen4。作为联想ThinkCentre M大师系列的旗舰产品,其配备了优质的显示屏,拥有强大的性能和稳定安全的特性,能够满足多样的工作场合,为商用一体机的行业…

Java核心知识点整理大全6-笔记

目录 4.1.4. 线程生命周期(状态) 4.1.4.1. 新建状态(NEW) 4.1.4.2. 就绪状态(RUNNABLE): 4.1.4.3. 运行状态(RUNNING): 4.1.4.4. 阻塞状态(BLOCKED)&#xff…

五、程序员指南:数据平面开发套件

服务质量 (QoS) 框架 本章介绍 DPDK 服务质量 (QoS) 框架。 21.1 带有 QoS 支持的数据包流水线 下图显示了一个具有 QoS 支持的复杂数据包处理流水线的示例 表21.1:带有 QoS 支持的复杂数据包处理流水线 这个流水线可以使用可重用的 DPDK 软件库构建。在这个流…

HarmonyOS ArkTS语言,运行Hello World(一)

一、下载与安装DevEco Studio 在HarmonyOS应用开发学习之前,需要进行一些准备工作,首先需要完成开发工具DevEco Studio的下载与安装以及环境配置。 进入DevEco Studio下载官网,单击“立即下载”进入下载页面。 DevEco Studio提供了Windows…

【深度学习】不用Conda在PP飞桨Al Studio三个步骤安装永久PyTorch环境

在 PaddlePaddle AI Studio 中使用 Python 虚拟环境安装 PyTorch 免责声明 在阅读和实践本文提供的内容之前,请注意以下免责声明: 侵权问题: 本文提供的信息仅供学习参考,不用做任何商业用途,如造成侵权,请私信我&am…

OpenAI董事会秒反悔!奥特曼被求重返CEO职位

明敏 丰色 发自 凹非寺 量子位 | 公众号 QbitAI 1天时间,OpenAI董事会大变脸。 最新消息,他们意在让奥特曼重返CEO职位。 多方消息显示,因为“投资人的怒火”,OpenAI董事会才在一天时间里来了个大反转。 微软CEO纳德拉被曝在得…

【nlp】2.8 注意力机制拓展

注意力机制拓展 1 注意力机制原理1.1 注意力机制示意图1.2 Attention计算过程1.3 Attention计算逻辑1.4 有无attention模型对比1.4.1 无attention机制的模型1.4.2 有attention机制的模型1 注意力机制原理 1.1 注意力机制示意图 Attention机制的工作原理并不复杂,我们可以用下…

springBoot整合quartz定时任务

声明 Quartz是一种基于java实现的任务调度框架,可以定时自动的执行你想要执行的任何任务。 官网:quartz官网 利用Quartz的定时任务技术可以应用于许多不同的场景,帮助我们实现定时执行任务、数据清理、缓存刷新、邮件发送、数据备份、系统监…

【Redis篇】简述Java中操作Redis的方法

文章目录 🎄简述Jedis🎄Jedis优点🍔使用Jedis连接Redis⭐进行测试🎈进行测试 Redis(Remote Dictionary Server)是一种流行的高性能内存数据库,广泛应用于各种应用程序和系统中。作为Java开发人员…

【giszz笔记】产品设计标准流程【7】

(续上回) 今天来讨论下产品设计标准流程中,交互设计和视觉设计的内容。 想参考之前文章的,我把链接给到这里。 【giszz笔记】产品设计标准流程【6】-CSDN博客 【giszz笔记】产品设计标准流程【5】-CSDN博客 【giszz笔记】产品…

js双击修改元素内容并提交到后端封装实现

前面发过一个版本了,后来又追加了些功能。重新发一版。新版支持select和radio。 效果图: 右上角带有绿标的,是可以修改的单元格。如果不喜欢显示绿标,可以传递参数时指定不显示,如果想改为其它颜色,也可以…

涉密人员离职怎么做好安全管理?

在信息安全领域,涉密人员的离职安全管理具有极其重要的意义。一旦涉密人员离职,可能会对单位的信息安全造成威胁,因此必须采取有效的措施来确保涉密人员离职后的信息安全。 一、涉密人员离职安全管理的现状 目前,许多单位在涉密人…

QML22、常规组件Page

Page是一个容器控件,可以方便地向页面添加页眉和页脚项。 title : string 此属性保存页面标题。 header : Item 此属性保存页眉项。标题项被定位到顶部,并调整大小为页面的宽度。缺省值为空。 注意:指定一个ToolBar, TabBar,或DialogButtonBox作为页眉会自动将各自的ToolBar…