交叉编译工具链

一、交叉编译

1. 编译原理

在这里插入图片描述
机器码(二进制)是处理器能直接识别的语言,不同的机器码代表不同的运算指令,处理器能够识别哪些机器码是由处理器的硬件设计所决定的,不同的处理器机器码不同,所以机器码不可移植

汇编语言是机器码的符号化,即汇编就是用一个符号来代替一条机器码,所以不同的处理器汇编也不一样,即汇编语言也不可移植

C语言在编译时我们可以使用不同的编译器将C源码编译成不同架构处理器的汇编,所以C语言可以移植

2. GCC编译原理

在这里插入图片描述

3. 交叉编译

程序的编译和运行不在同一台机器上

在这里插入图片描述

4. 交叉编译工具链

交叉编译工具链的获取:

  1. 官网获取(不推荐,需要自己进行复杂配置与编译)
    http://ftp.gnu.org/gnu/gcc/
  2. BSP板级开发支持包(推荐)
    samsung、全志…

交叉编译工具链的内容

  1. 交叉编译工具
    gcc/readelf/size/nm/strip/objcopy/objdump/addr2line

  2. ARM架构的库

二、ELF文件格式

1. ELF文件格式

ELF格式是Linux平台上应用最广泛的二进制工业标准之一
ELF格式的文件内包含了很多个段不同的段存储了不同的信息;因为ELF格式的文件要通过Linux系统的加载和管理才能运行,所以除了最基本的代码段和数据段之外,其中还存储了很多其它的信息,如符号表、调试信息等
在这里插入图片描述

ELF文件相关命令

file

file + 文件名		查看文件的详细信息

readelf

 readelf -h + 文件名 	列出elf文件的头部信息readelf -a + 文件名 	列出elf文件的所有信息

2. BIN格式文件

BIN文件一般是直接运行在CPU之上的可执行文件,文件内只包含了CPU能够直接识别和运行的指令和数据,不包含其它系统相关的信息
在这里插入图片描述

三、交叉编译工具链常用工具

size 列出目标文件每一段的大小以及总体的大小

size + 文件名

size a.out
查看是CPU可直接执行的段字节大小
ll a.out
查看的是ELF格式文件所有的字节大小
在这里插入图片描述

  1. 文本段(Text Segment)
    也称为代码段。
    存储程序的机器指令,即编译后的可执行代码。
    这些指令在程序运行时被加载到内存中,并由处理器执行。
  2. 数据段(Data Segment):
    存储已经初始化的全局变量、静态变量和常量。
    这些变量在程序编译时就被赋予了初值,存储在这个段中。
    这部分数据在程序加载时就会被读取到内存中。
  3. BSS段(Block Started by Symbol):
    存储未初始化的全局变量和静态变量。
    这些变量在编译时没有被初始化,因此在内存中只分配了空间而没有赋初值。
    当程序加载时,这部分内存会被清零或设置为默认值(通常是0)。
  4. dec(Decimal):
    这个数字表示整个可执行文件的大小(文本段 + 数据段 + BSS段)。
    以十进制形式表示。
  5. hex(Hexadecimal):
    这个数字表示整个可执行文件的大小的十六进制形式。

nm 列出目标文件中的符号表(标示符)

nm + 文件名

strip 丢弃目标文件中的符号

strip + 文件名		注:对于嵌入式开发,这个命令很重要(也可以称为瘦身命令)

在这里插入图片描述

objdump 从目标文件中显示信息

eg:		objdump -d + 文件名	将目标文件反汇编(机器码->汇编)

objcopy 对目标文件进行复制和转换

eg:objcopy --gap-fill=0xff -O binary a.out a.bin		
将目标文件转换为bin格式

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

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

相关文章

Linux 进程间通信(IPC)

文章目录 进程间通信介绍进程间通信的概念进程间通信的目的进程间通信的本质理解进程间通信分类 管道匿名管道匿名管道的原理 pipe函数管道的特点 命名管道命名管道的原理使用相关命令创建命名管道使用命名管道实现server端和client端通信 system V共享内存共享内存通信的基本原…

算法基础(1):排序和查找算法

1、排序算法 1.1、堆排序(大顶堆)-重点: 参考文章:堆排序1、堆排序二 前置知识: 大顶堆:完全二叉树,且父节点大于左右儿子,左右子树又是大顶堆,依赖数组来实现(vector)第一个节点的父节点&…

【Rust】Rust学习 第十六章无畏并发

安全且高效的处理并发编程是 Rust 的另一个主要目标。并发编程(Concurrent programming),代表程序的不同部分相互独立的执行,而 并行编程(parallel programming)代表程序不同部分于同时执行,这两…

C# 反编译dll文件,将dll文件转为cs文件

工具名:reflector,可免费使用 工具下载地址使用方法 工具下载地址 下载地址: https://www.red-gate.com/products/reflector/ 使用方法 下载安装; 打开软件 打开dll文件 侧边栏找打刚打开的dll文件,直接就能导…

Redisson 分布式锁

Redis是基础客户端库,可用于执行基本操作。 Redisson是基于Redis的Java客户端,提供高级功能如分布式锁、分布式集合和分布式对象。 Redisson提供更友好的API,支持异步和响应式编程,提供内置线程安全和失败重试机制。 实现步骤…

密码学学习笔记(十八):Diffie–Hellman (DH) 密钥交换

DH算法是第一个密钥交换算法,也是第一个得到形式化描述的公钥密码算法。 群论 DH密钥交换算法基于数学中的群论,群论也是当今大多数公钥密码的基础。 要使集合及其运算成为一个群,需要满足以下性质: 封闭性:群中两…

使用three.js与WebGL相比有什么优势?

推荐:使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 特点 WebGL和Three.js是两个与网页3D图形渲染相关的技术。以下是它们的一些特点: WebGL: 基于OpenGL ES标准,为网页提供了一种基于GPU加速的图形渲染API。具有高性能的图像处…

【从零学习python 】75. TCP协议:可靠的面向连接的传输层通信协议

文章目录 TCP协议TCP通信的三个步骤TCP特点TCP与UDP的区别TCP通信模型进阶案例 TCP协议 TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议…

在思科(Cisco)设备上配置 DHCP 服务器

DHCP广泛用于LAN环境中,从集中式服务器动态分配主机IP地址,从而显着减少IP地址管理的开销。DHCP 还有助于节省有限的 IP 地址空间,因为不再需要将 IP 地址永久分配给主机,只有连接到网络的主机才会使用 IP 地址。DHCP 服务器将路由…

网络聊天室

一、项目要求 利用UDP协议,实现一套聊天室软件。服务器端记录客户端的地址,客户端发送消息后,服务器群发给各个客户端软件。 问题思考 客户端会不会知道其它客户端地址? UDP客户端不会直接互连,所以不会获知其它客…

详解使用SSH远程连接Ubuntu服务器系统

演示环境: 1.Windows10系统 2.VMware Workstation Pro虚拟机 2.Ubuntu16.04.6(以上版本通用) 回归正题 一、在Ubuntu端: 1.首先需要安装SSH服务器,在ubuntu终端输入以下指令 sudo apt-get install ssh2.输入你的ubu…

判断三角形

int main() {int a 0;int b 0;int c 0;scanf("%d%d%d", &a, &b, &c);if ((ab>c)&&(ac>b)&&(bc>a)){if (a b && b c){printf("等边三角形\n");}else if ((a b && b ! c) || (a c && c…

网约车接单神器:智能化技术与出行服务的完美结合

随着移动互联网的迅猛发展,网约车行业成为现代出行方式的主流之一。为了提高用户体验和服务效率,网约车接单神器应运而生。本文将探讨网约车接单神器的专业性、思考深度和逻辑性,以及其与智能化技术和出行服务的完美结合。 一、引言&…

leetcode 309. 买卖股票的最佳时机含冷冻期

2023.8.22 本题是买卖股票系列 冷冻期。 由于引入了冷冻期,并且这个冷冻期是在卖出股票才会出现,因此我dp数组设置了四种状态: 状态一:持有股票。状态二:不持有股票: 之前就卖了,所以今天不处…

论AI与大数据之间的关系

前言 在21世纪,"AI"和"大数据"已经成为科技领域的热门词汇。它们不仅是创新的代名词,更是现代技术发展的双翼。然而,很多人对于AI与大数据之间的关系仍然停留在表面的理解。本文旨在深入探讨这两者之间的深厚关系&#…

设置Windows主机的浏览器为wls2的默认浏览器

1. 准备工作 wsl是可以使用Windows主机上安装的exe程序,出于安全考虑,默认情况下改功能是无法使用。要使用的话,终端需要以管理员权限启动。 我这里以Windows Terminal为例,介绍如何默认使用管理员权限打开终端,具体…

[LeetCode111双周赛LeetCode359周赛] DP双指针

参考灵神和闫总的讲解和代码: https://www.bilibili.com/video/BV1rP411s7Z5 https://space.bilibili.com/206214 7006. 销售利润最大化 https://leetcode.cn/problems/maximize-the-profit-as-the-salesman/ Solution 动态规划 哈希表 首先按照 end 的顺序分…

kafka-- kafka集群 架构模型职责分派讲解

一、 kafka集群 架构模型职责分派讲解 生产者将消息发送到相应的Topic,而消费者通过从Topic拉取消息来消费 Kafka奇数个节点消费者consumer会将消息拉去过来生产者producer会将消息发送出去数据管理 放在zookeeper

jmeter HTTP请求默认值

首先,打开JMeter并创建一个新的测试计划。 右键单击测试计划,选择"添加" > “配置元件” > “HTTP请求默认值”。 在HTTP请求默认值中,您可以设置全局的HTTP请求属性,例如: 服务器地址&#xff1a…

数据结构——队列(C语言)

需求:无 本篇文章将解决一下几个问题: 队列是什么?如何实现一个队列?什么场景下会用队列? 队列的概念: 队列:一种只允许一端进行插入数据操作,在另一端进行删除操作的特殊线性表。…