常用的GUN二进制工具集

day45-硬件学习之GUN工具链常用工具、SDK工具及链接脚本 1. .bss段用于存放未初始化或初始化为0的数据在运行时会被自动清零- 典型例子://静态变量(全局或局部)//显式初始化为0的全局变量2.COMMON段用于存放未初始化的非静态全局变量链接时才确定最终大小和位置允许多个目标文件定义同名符号- 典型例子://未初始化的非静态全局变量3. .data段用于存放已初始化的全局变量和静态变量(非零值)需要在程序文件中保存实际的初始值- 典型例子:// 初始化为非零值// 初始化为非零数组。 阅读详情

GNU Binutils

The GNU Binutils are a collection of binary tools. The main ones are:

  • ld - the GNU linker.
  • as - the GNU assembler.

But they also include:

  • addr2line - Converts addresses into filenames and line numbers.
  • ar - A utility for creating, modifying and extracting from archives.
  • c++filt - Filter to demangle encoded C++ symbols.
  • dlltool - Creates files for building and using DLLs.
  • gold - A new, faster, ELF only linker, still in beta test.
  • gprof - Displays profiling information.
  • nlmconv - Converts object code into an NLM.
  • nm - Lists symbols from object files.
  • objcopy - Copies and translates object files.
  • objdump - Displays information from object files.
  • ranlib - Generates an index to the contents of an archive.
  • readelf - Displays information from any ELF format object file.
  • size - Lists the section sizes of an object or archive file.
  • strings - Lists printable strings from files.
  • strip - Discards symbols.
  • windmc - A Windows compatible message compiler.
  • windres - A compiler for Windows resource files.

Most of these programs use BFD, the Binary File Descriptor library, to do low-level manipulation. Many of them also use the opcodes library to assemble and disassemble machine instructions.

The binutils have been ported to most major Unix variants as well as Wintel systems, and their main reason for existence is to give the GNU system (and GNU/Linux) the facility to compile and link programs.


其中:

addr2line 将指定地址转化为对应的文件名和行号,常用于分析和定位内存访问错误的问题,编译源文件时需要使用-g参数以生成带有调试信息的可执行文件

使用方法:

0、预先开启core dump选项,系统默认 是不开启的,需要使用命令ulimit 来开启core转储

ulimit -c 1024(设置core文件最大为1024KBytes)或者ulimit -c unlimited(不限制core文件大小)

1、使用参数-g编译源文件,并运行,由于开启了core转储,程序崩溃时就会产生core文件

gcc test.c -g -o test

2、使用dmesg命令查询core文件中记录的发成错误的地址(IP寄存器中的地址,例如值为0x0804812)

dmesg core

3、对错误地址和可执行文件使用工具addr2line定位源代码中出错行

addr2line 0x0804812 -f -e test

ar 创建修改、提取档案文件(库文件)

使用目标文件创建静态库
ar crs libtest.a test.o

gprof 程序性能检测工具

它记录了每个函数被调用的次数以及其执行的时间,通过此工具可以快速锁定执行时间最多的函数并对其优化
详细说明

nm 从目标文件中列出符号表(文件名、函数名)

nm输出的结果由三部分组成(地址、段、符号)
如:
00000000 T main 
其中:
00000000  表示地址
T         表示代码段
main      表示符号名


  
符号类型说明:


A	符号的地址是绝对的,不会因为进一步的连接而改变  
B/b	符号位于bss段
D/d	符号位于data段
R/r	符号位于rdata段
T/t	符号位于代码段

objcopy 对目标文件进行格式转换

objdump 显示目标文件中的信息

objdump -d test.o    显示汇编代码
objdump -S test.o    显示汇编代码及其源码

readelf 显示elf格式目标文件的信息

详细说明

size 获取目标文件中各种段的大小

strings 获取目标文件中所有字符串常量

strip 丢弃可执行文件中的调试信息,提升性能、减少文件占用

注:应该在程序发布时再考虑是否丢弃调试信息







MinGW(2)GUN工具集 MinGW第二部分(共两部分) MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist GNU on Windows的略称。 在网上很难下的,因为我最大上传限制在10M,所以只好分两次上传了。 立即下载

相关推荐

gnu 工具集全套文档

as bfd binutils gcc gprof ld 等文档使用手册 linux 下编程工具集的最好介绍,作为linux下开发者的必备工具集

GNU工具链简介(GCC编译器+Binutils工具集+GDB调试器+make工具)

以下内容源于网络资源的学习与整理,如有侵权请告知删除。

主要记录嵌入式学习与开发过程。 2288

GUN4.3.5工具集合(Windows版)

mingw64,是Minimalist GNUfor Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。

linux项目GNU工具集的开发介绍

GNU 工具集的起源、发展历程、核心组成部分、开发流程以及对 Linux 系统和开源软件世界都是很具有重要性的。GNU 工具集作为 GNU 项目的核心之一,为 Linux 和其他 Unix 系统提供了丰富的命令行工具和实用程序,对于推动自由软件运动和开源生态系统的发展起到了不可替代的作用。希望本文能够帮助您更好地了解 GNU 工具集及其在开源软件世界中的重要性。扫码进群领资料。

prop428的博客 909

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

eMMC FFU固件更新实战:从协议解析到设备修复

本文详细解析eMMC FFU固件更新技术,从协议原理到实战操作,涵盖EXT_CSD寄存器操作、命令流状态机解析及专业工具使用指南。通过真实维修案例,展示如何利用FFU机制修复设备故障,并提供高级优化技巧与安全注意事项,是硬件工程师和维修技术人员的实用参考。

weixin_29191761的博客 378

认识开发工具(GNU工具集、MinGW、CMake)

🥰WELCOME🥰 🔥🔥🔥欢迎来到K❤️J的空间🔥🔥🔥 💞💞💞本文主要讲解开发工具集💯!💞💞💞 🤩写在前面🤩 GNU工具集 MinGW CMake 🕛 人的才能像挂钟一样,如果停止了摆动,就要落后了~🕛 🤩博客内容🤩 ✨GNU工具集✨ GNU 项目 (GNU’s Not Unix) GNU 项目是为了创建自由的类 Unix 系统,也因此开发出来很多开源的系统工具,其中非常著名的就是 GCC (GNU Compiler Collection,GNU编译器套件)。 在 GNU 工具集里面,开..

kangjielearning的博客 4787

PyTorch版Unet训练后别只看loss:手把手教你计算并可视化多类别语义分割的mIoU(附完整代码)

本文详细介绍了在PyTorch中使用Unet模型进行多类别语义分割后,如何计算和可视化mIoU(mean Intersection over Union)以全面评估模型性能。通过完整的代码示例和实用技巧,帮助开发者从loss优化转向更精准的区域分割评估,特别适用于医学图像分析等关键场景。

weixin_30906185的博客 435

GUN工具介绍以及编译过程分享

**linux高级C语言** GUN工具 编译工具:把一个源程序编译为一个可执行程序 调试工调试具:能对执行程序进行源码或汇编级调试 软件工程工具:用于协助多人开发或大型软件项目的管理,如make,CVS,Subvision 其他工具:用于把多个目标文件链接成可执行文件的连接器,或者用作格式转换的工具。 部分相关资料 http://www.gnu.org/ http://gcc.gnu.org/ http://www.kernel.org/ http://www.linux,org...

weixin_46417419的博客 1292

线性代数——(期末突击)行列式(上)-行列式计算、行列式的性质

简单解释一下:4213原本的顺序应为1234,对于‘4’而言,‘2’、‘1’、‘3’都应该排在它的前面,所以此处记逆序数为3;对于‘2’而言,‘1’应该排在它的前面,而‘3’排在它之后 是合理的,所以此处只有一个逆序数;最后看‘1’,其后面的‘3’排在后面显然也是合理的,故而4213的逆序数为4.一般我们使用这个性质来计算四阶行列式,也就是将其变换成三角行列式,再计算对角线的值;以主对角线为分界线的就为正三角,反之则为反三角行列式。若行列式某一行(列)为0,则该行列式=0.将和的那一行分开,其余行。

li13437542099的博客 1万+

中移物联ML307C模组OPENCPU开发环境搭建全攻略

本文详细介绍了中移物联ML307C模组OPENCPU开发环境搭建的全过程。从OPENCPU模式的核心优势解析,到SDK获取、Python与scons工具安装,再到解读SDK目录结构与实战编译命令,最后提供常见问题避坑指南,帮助开发者快速构建高效的物联网应用编译环境。

weixin_29168393的博客 742

硬件-DAY07(GUN工具链常用工具、SDK工具及链接脚本)

common区:全局变量且赋值了的1. .bss段用于存放未初始化或初始化为0的数据在运行时会被自动清零- 典型例子:// 静态变量(全局或局部)// 显式初始化为0的全局变量2.COMMON段用于存放未初始化的非静态全局变量链接时才确定最终大小和位置允许多个目标文件定义同名符号- 典型例子://未初始化的非静态全局变量3. .data段用于存放已初始化的全局变量和静态变量(非零值)需要在程序文件中保存实际的初始值- 典型例子:// 初始化为非零值。

Cwcnma的博客 1253

0.1 ROCm rocr-libhsakmt实现深度剖析专栏介绍

本专栏深入解析AMD ROCm生态核心组件rocrruntime,从底层硬件交互到上层封装实现。重点剖析libhsakmt驱动层的七大核心模块设计,包括拓扑管理、队列调度、事件同步等关键机制;详解C++接口封装策略与工程实践,如资源管理、多线程优化等。通过"硬件-驱动-应用"全链路技术拆解,帮助开发者深入理解ROCm运行时机制,解决性能调优、调试等实际问题,为HPC/AI应用开发提供底层技术支撑。

图形/计算GPU的驱动与虚拟化技术分享园地 5981

嵌入式开发学习日志Day7(ARM体系架构——GUN工具链常用工具、SDK工具及链接脚本、Makefile)

1. .bss段用于存放未初始化或初始化为0的数据在运行时会被自动清零- 典型例子://静态变量(全局或局部)//显式初始化为0的全局变量2.COMMON段用于存放未初始化的非静态全局变量链接时才确定最终大小和位置允许多个目标文件定义同名符号- 典型例子://未初始化的非静态全局变量3. .data段用于存放已初始化的全局变量和静态变量(非零值)需要在程序文件中保存实际的初始值- 典型例子:// 初始化为非零值// 初始化为非零数组。

qq_63203532的博客 1529

华为OD机试 - 统计文本数量(Java 2025 A卷 100分)

华为OD机试 2025A卷题库疯狂收录中,刷题。

学Java,找哪吒 1438

AMBA-CHI协议详解(十)

该规范提供了一个Request Retry(请求重试)机制,确保当请求到达一个Completer 时,它要么被接受,要么被给予一个RetryAck响应,以防止阻塞REQ通道。

Crazzy_M的博客 986

嵌入式之硬件学习(七)GUN工具说明、SDK工具、内存段及链接脚本

用于存放未初始化或初始化为0的数据- 在运行时会被自动清零- 典型例子:// 静态变量(全局或局部)// 显式初始化为0的全局变量SECTIONS.text : { ... } // 代码段.rodata ALIGN(4) : {*(.rodata*)} // 只读数据段.data ALIGN(4) : {*(.data)} // 已初始化数据段.bss ALIGN(4) : {*(.bss) *(COMMON)} // 未初始化数据段。

weixin_63557265的博客 1155

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Linux---GUN binutils

什么是GUN binutis?它是一个二进制工具集,默认情况下所有 Linux 发行版中都会安装这些二进制工具。实际大部分人应该是用过这些工具的,我一说大家就知道了。常用的二进制工具包括。工具用途nm列出目标文件中的符号size列出目标文件中各个段的大小和总大小,如数据段,代码段addr2line将程序地址翻译成文件名和行号objcopysection复制和删除objdump显示目标文件的信息和反汇编readelf显示有关ELF文件的信息strip从目标文件中剥离符号。

lihuan680680的博客 1155

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

学习嵌入式之IMAX6ULL——GUN工具链+点灯+SDK开发裸机驱动

将C/C++等高级语言源代码转换为汇编代码再将汇编代码转换为目标文件支持多种编程语言和目标平台提供丰富的优化选项和编译控制选项。

sx243694的博客 658

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

交叉编译工具链中GUN常用命令简介

一、交叉编译工具链前缀:arm-none-linux-gnueabi- 二、常用命令 (注:此处以汇编点亮led灯代码为例) 重点掌握: 1. gcc 编译命令 arm-none-linux-gnueabi-gcc -c ***.S或***c -o ***.o eg: arm-none-linux-gnueabi-gcc -c led_asm.S -o led_asm.o 2. ld 链接:将所有的.o文件链...

qq_42798939的博客 1038

linux下,ELF文件与GUN binutils

命令,列出elf文件中text,data,bss段的大小。使用 ldd 命令了解 ls 命令所依赖的系统库。对象:“目标文件”和“可执行文件。对象:“目标文件”和“可执行文件。

weixin_58885663的博客 483

GUN 意思

http://blog.youkuaiyun.com/luoweifu/article/details/50153461 在Linux下进行编程,GNU是你永远绕不开的一个概念,因为你处处都可以看到它,那它是一个什么东西呢?  GNU是GNU’s Not Unix的缩写,意思是GNU并不是Unix。那它是什么呢?其实它有多个含义: GUN项目 1984年,史托曼(Richard S

常思考->有目标->重实践->善反思 8151

嵌入式学习的第四十七天-GUN工具链+点灯+SDK开发裸机驱动

库的意义在于将寄存器和对寄存器的操作用结构体和对应的函数加以封装,大大提高开发的效率,提高程序可读性等。可以说stm32的成功和意法半导体推出的SDK有着很大的关系。inputRegister:外设输入 IO 选择寄存器地址,有些 IO 在设置为其他的复用功能以后还需要设置 IO 输入寄存器, 比如 GPIO1_IO03 要复用为 UART1_RX 的话还需要设置。寄存器UART1_RX_DATA_SELECT_INPUT,此寄存器地址 为0X020E0624。从目标文件中提取特定的段(sections)

m0_73820654的博客 599

Codeforces 1457D. XOR-gun(二进制+思维)

Description Solution 设原始数组为aaa, 设bib_ibi​ 为aia_iai​ 的二进制位数 若存在一个 iii,满足 bi−1=bi=bi+1b_{i-1} = b_{i} = b_{i+1}bi−1​=bi​=bi+1​,则我们只需要将后两个数异或,得到的数一定比 ai−1a_{i-1}ai−1​小(因为最高位变成0了) 若这样的 iii 不存在,则原始数组的长度一定不超过 2*30 = 60, 我们暴力计算 n≤60n \leq 60n≤60 的情况: 最后的答案数组一定存在两

chr1stopher 294

(一)Linux Bash shell的一些常用基本命令

linux内核组成部分 一、linux内核负责部分:1.硬件设备 管理使用 2.软件程序(系统)——>软件操作 3.系统内存 ⚠4.文件管理(保存文件、删除文件、修改文件等) ...

qq_43384095的博客 261

GUN ASM概述

转自:http://blog.youkuaiyun.com/shuzjd/article/details/7916515 GAS指代GUN ASM 一、简介      作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代

如丧 739
上一篇: gcc常用命令选项
下一篇: 设计模式开篇-不要滥用设计模式
早起的虫儿灬
博客等级 码龄10年 54粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值