GNU工具链

news2024/9/22 19:37:05

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.coloradmin.cn/o/1237714.html

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

相关文章

倍福控制器搭建IgH环境

最近收到了倍福CX5230控制器,控制器上自带EBUS总线扩展的IO,使用的是CCAT网卡,在控制器上安装preempt-rt Linux系统,再安装IgH。 IgH正常识别到了扩展的IO模块。 运行控制程序,可以正常控制IO输出。

提升效率必备:电脑文件批量重命名的实用技巧大放送

在日常工作中,电脑文件的重命名是一项常见的操作。当要处理大量的文件,并且要按照一定的规则或逻辑进行重命名时,手动一个一个重命名显然是非常低效的。掌握批量重命名的技巧可提高工作效率。现在一起来看云炫文件管理器如何批量重命名电脑上…

[Python人工智能] 四十.命名实体识别 (1)基于BiLSTM-CRF的威胁情报实体识别万字详解

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章普及VS Code配置Keras深度学习环境,并对比常用的深度学习框架,最后普及手写数字识别案例。这篇文章将讲解如何实现威胁情报实体识别,利用BiLSTM-CRF算法实现对ATT&CK相关的技战术实体…

jenkins springCloud项目优雅下线

文章目录 场景解决下线请求效果如图贴一个可用的部署脚本 场景 在 Spring Cloud 项目的微服务实例关闭时,需要首先从注册中心设置为下线,避免该服务的消费者继续请求该服务实例,导致请求失败如果我们在服务实例从注册中心取消注册后&#xff…

macos端文件夹快速访问工具 Default Folder X 最新for mac

Default Folder X 是一款实用的工具,提供了许多增强功能和快捷方式,使用户能够更高效地浏览和管理文件。它的快速导航、增强的文件对话框、自定义设置和快捷键等功能,可以大大提升用户的工作效率和文件管理体验。 快速导航和访问:…

【20年扬大真题】设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保障该表的有序性。

【20年扬大真题】 设顺序表va中的数据元素递增有序。 试写一算法&#xff0c;将x插入到顺序表的适当位置上&#xff0c;以保障该表的有序性。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<malloc.h> #define MaxSize 9//定义最大长度 int InitAr…

c++ 谓词

1. 一元谓词 #include <iostream> #include<vector> #include<algorithm>using namespace std;class CreaterFive{ public:bool operator()(int val){return val>5;} };int main() {vector<int> vec;for(int i0; i<10; i){vec.push_back(i);}ve…

Python-大数据分析之常用库

Python-大数据分析之常用库 1. 数据采集与第三方数据接入 1-1. Beautiful Soup ​ Beautiful Soup 是一个用于解析HTML和XML文档的库&#xff0c;非常适用于网页爬虫和数据抓取。可以提取所需信息&#xff0c;无需手动分析网页源代码&#xff0c;简化了从网页中提取数据的过…

项目经理面试经典问题大揭秘:聪明回答,轻松获得心仪职位!

作为一名申请了项目管理职位的求职者&#xff0c;要顺利入职必须过了面试这一关。然而&#xff0c;你可能会对面试官可能会问什么问题以及如何回答好感到迷茫。以下是我整理的一些关于项目经理面试问题及回答技巧&#xff0c;希望对你有所帮助&#xff01; 招聘方&#xff08;P…

危险了:蓝牙协议爆严重安全漏洞!

导读据外媒报道&#xff0c;美国的物联网安全研究公司Armis在蓝牙协议中发现了8个零日漏洞&#xff0c;而这些漏洞将会影响全球超过53亿的设备&#xff0c;包括Android、iOS、Windows、Linux系统设备以及使用短距离无线通信技术的物联网设备。 Armis的研究人员利用这些漏洞构建…

OpenCvSharp从入门到实践-(02)图像处理的基本操作

目录 图像处理的基础操作 1、读取图像 1.1、读取当前目录下的图像 2、显示图像 2.1、Cv2.ImShow 用于显示图像。 2.2、Cv2.WaitKey方法用于等待用户按下键盘上按键的时间。 2.3、Cv2.DestroyAllWindows方法用于销毁所有正在显示图像的窗口。 2.4实例1-显示图像 2.4实例…

阿里云学生认证可领300元无门槛代金券(高效计划)

阿里云高校计划学生和教师均可参与&#xff0c;完成学生认证和教师验证后学生可以免费领取300元无门槛代金券和3折优惠折扣&#xff0c;适用于云服务器等全量公共云产品&#xff0c;订单原价金额封顶5000元/年&#xff0c;阿里云百科aliyunbaike.com分享阿里云高校计划入口及学…

基于点之间距离的多目标跟踪

1. 动机 目标跟踪是计算机视觉领域一种常用的算法&#xff0c;用于将前后帧中的同一个目标关联起来&#xff0c;从而可以针对某一个特定目标进行分析&#xff0c;如对状态进行投票平滑获取更为稳健的结果。 然而&#xff0c;目前流行的跟踪算法大多是基于检测的bbox之间的IOU来…

pyqt5实现串口工具

使用pyqt5做一个串口工具 一、设计界面二、功能代码实现 一、设计界面 界面使用qtdesigner设计&#xff0c;然后在转成Python代码&#xff0c;以下是转好后的代码 untitled_serial.py # -*- coding: utf-8 -*-# Form implementation generated from reading ui file untitle…

【HarmonyOS】获取备案需要的公钥和MD5签名问题

【关键字】 HarmonyOS、公钥、MD5签名 【问题描述】 有cp反馈Harmony App如何获取备案需要的公钥和MD5签名。 【解决方案】 1、获取备案需要的公钥&#xff1a; 1&#xff09;用记事本打开签名对应.cer文件 2&#xff09;里面的内容粘贴到一个可以查看证书的网站上面&…

【广州华锐互动】VR防溺水安全内容体验提高群众防溺水意识

在全球各地&#xff0c;溺水是导致儿童和青少年死亡的主要原因之一。据世界卫生组织的统计&#xff0c;全球每年有超过36万人因溺水而死亡&#xff0c;其中大部分是儿童和青少年。因此&#xff0c;提供有效的防溺水教育和培训至关重要。随着科技的发展&#xff0c;虚拟现实&…

C++_String增删查改模拟实现

C_String增删查改模拟实现 前言一、string默认构造、析构函数、拷贝构造、赋值重载1.1 默认构造1.2 析构函数1.3 拷贝构造1.4 赋值重载 二、迭代器和范围for三、元素相关&#xff1a;operator[ ]四、容量相关&#xff1a;size、resize、capacity、reserve4.1 size、capacity4.2…

【Redis篇】简述Redis | 详解Redis命令

文章目录 &#x1f38d;什么是Redis&#x1f38d;Redis特点&#x1f38d;Redis应用场景&#x1f354;Windows安装Redis⭐启动Redis &#x1f33a;Redis数据类型&#x1f33a;Redis常用命令⭐字符串string操作命令⭐哈希hash操作命令⭐列表list操作命令⭐集合set操作命令⭐有序集…

在Ubuntu18.04安装适合jdk8的eclipse

直接在Ubuntu软件那里下载的eclipse不能用&#xff0c;下载后启动会报错&#xff1a;Eclipse An error has occurred. See the log file/home/hadoop/.eclipse/ org.eclipse.platform_3.8_155965261/ configuration/1700567835954.log 上网搜索方法&#xff0c;按教程说的修改e…

华为认证 | HCIE考证流程详解!

HCIE&#xff08;Huawei Certified ICT Expert&#xff0c;华为认证ICT专家&#xff09;是华为认证体系中最高级别的ICT技术认证&#xff0c;旨在打造高含金量的专家级认证&#xff0c;为技术融合背景下的ICT产业提供新的能力标准&#xff0c;以实现华为认证引领ICT行业技术认证…