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.hqwc.cn/news/205694.html

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

相关文章

迪文科技工业串口屏(DMG10600C070-03WTC)更新程序烧录刷机

迪文科技工业串口屏(DMG10600C070-03WTC)更新程序烧录刷机 问题 使用SD卡上电烧录,SD卡文件路径如下: 烧录时,无法写入,成功烧录文件数为0 解决方法 格式化读卡器 格式化脚本 echo off %1 %2 ver|find "5.">…

springboot+bootstarp+jsp房屋租赁系统ssm_t65a9

小型房屋租赁系统主要有管理员、房东和租户三个功能模块。以下将对这三个功能的作用进行详情的剖析。 管理员模块:管理员是系统中的核心用户,管理员登录后,可以对后台系统进行管理。主要功能有个人中心、房东管理、租户管理、房源城市管理、房…

Logstash同步MySQL数据到ES

简介 1.1 什么是Logstash? Logstash作为一个具备实时流水线功能的开源数据收集引擎,拥有强大的能力。它能够从不同来源收集数据,并将其动态地汇聚,进而根据我们定义的规范进行转换或者输出到我们定义的目标地址。 1.2 Logstash的…

linux服务器安装gitlab

一、安装gitlab sudo yum install curl policycoreutils-python openssh-server openssh-clients sudo systemctl enable sshd sudo systemctl start sshd sudo firewall-cmd --permanent --add-servicehttp curl https://packages.gitlab.com/install/repositories/gitla…

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

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

数据分层:打造数据资产管家

一、引言 随着企业数据规模的增长,数据的价值变得越来越重要。然而,传统的数据库在承载大量数据时面临挑战,需要高效有序的维护。因此,建立高效的数据仓库成为了企业决策和管理的基石,但现代技术的背景下,…

为实现企业级 AIGC 工具的「iPhone 时刻」,我们做了哪些努力?

2007 年,乔布斯发布了第一款 iPhone,从此彻底改变了手机行业的市场走向。iPhone 成功的背后,一个很重要的原因是:它让用户以更简单、更符合直觉的方式来使用手机。 如今,AIGC 工具也在等待它的「iPhone 时刻」&#xf…

C++ 条件与分支

前言 今天我们来看看条件语句,换句话说,也就是 if 语句、if else 和 else if 等等这写语句。 我知道大家基本上已经非常了解 if 语句和所有 C 中的分支语句,但我还是鼓励你们继续看完这一讲,这里可能包含一些新东西。我们还会深入…

LeetCode算法心得——爬楼梯(记忆化搜索+dp)

大家好,我是晴天学长,第二个记忆化搜索练习,需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1)爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或…

C++——stack和queue

目录 stack的介绍和使用 stack的使用 queue的介绍和使用 queue的使用 容器适配器 deque的介绍 deque的缺陷 priority_queue的介绍和使用 priority_queue的使用 仿函数 反向迭代器 stack的介绍和使用 在原来的数据结构中已经介绍过什么是栈了,再来回顾一下…

LeetCode(30)长度最小的子数组【滑动窗口】【中等】

目录 1.题目2.答案3.提交结果截图 链接: 长度最小的子数组 1.题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果…

爬取春秋航空航班信息

一、使用fiddler爬取小程序春秋航空航班信息 使用Fiddler爬取春秋航空微信小程序(手机上由于网络问题,无法进入,使用电脑版) 搜索航班信息 搜索记录 使用Fiddler查找url(没有得到有效url) 继续查找,发现航班信息列…