【ARM 嵌入式 编译系列 9-- GCC 编译符号表(Symbol Table)的详细介绍】
文章目录
- 什么是符号表
- 符号表的作用是什么
- 如何生成符号表
- 符号表中的数据类型有哪些?
- 符号表与map文件什么关系?
上篇文章:ARM 嵌入式 番外篇 编译系列 8 – RT-Thread 编译命令 Scons 详细讲解
什么是符号表
在 ARM GCC 中,符号表(Symbol Table)是一个记录了代码中所有符号信息的数据结构。符号可以是变量、函数、宏、类型等标识符。符号表中的每个符号都有一个唯一的名称,并且与该符号关联的还有符号的地址、类型、大小等信息。
符号表的作用是什么
符号表在编译过程中起着重要的作用。它允许编译器在编译期间解析和处理各种符号引用。在链接过程中,链接器使用符号表来解析符号的引用和重定位地址,以便正确地将程序的各个部分连接在一起。
如何生成符号表
在 GCC 中,你可以使用 -g 选项生成调试信息,其中包括符号表。这个符号表通常以一种特定的格式(如 ELF 格式)存储在可执行文件或库文件中。调试器可以使用这个符号表来显示和查询程序中的符号信息,以便在调试时定位问题或查看变量值和函数调用栈等。
使用"nm"命令或者"objdump"命令来生成符号表。
以下是具体步骤:
使用带有"-g"选项的arm-gcc编译你的代码。例如:
arm-none-eabi-gcc -g -o output.elf input.c
这会生成一个名为"output.elf"的二进制文件,它包含了调试信息。
使用"nm"或"objdump"命令生成符号表。例如:
arm-none-eabi-nm -n output.elf > symbol_table.txt
输入内容如下:
arm-none-eabi-nm -n soc.oU __bss_endU __bss_startU clock_framework_initU _edataU _estackU _etextU get_syscnt_usU _heap_endU _heap_startU rt_components_board_initU rt_console_set_deviceU rt_hw_interrupt_initU rt_kprintfU rt_system_heap_initU rt_tick_increaseU _sdataU _sstackU _stext
00000000 T baud_rate_fixup
00000000 t ctrlg_key_dis
00000000 R __fsym___cmd_reboot
00000000 R __fsym___cmd_reboot_name
00000000 T get_ref_clk
00000000 W get_sys_clock
00000000 t lock_crg_key
或者
arm-none-eabi-objdump -t output.elf > symbol_table.txt
这将会生成一个名为"symbol_table.txt"的文件,里面包含了符号表信息。
输处内容如下:
arm-none-eabi-objdump -t soc.osoc.o: file format elf32-littlearmSYMBOL TABLE:
00000000 l df *ABS* 00000000 soc.c
00000000 l d .text 00000000 .text
00000000 l d .data 00000000 .data
00000000 l d .bss 00000000 .bss
00000000 l d .text.__NVIC_SetPriority 00000000 .text.__NVIC_SetPriority
00000000 l F .text.__NVIC_SetPriority 00000054 __NVIC_SetPriority
00000000 l d .text.SCB_EnableICache 00000000 .text.SCB_EnableICache
00000000 l F .text.SCB_EnableICache 0000004c SCB_EnableICache
00000000 l d .text.SCB_EnableDCache 00000000 .text.SCB_EnableDCache
00000000 l F .text.SCB_EnableDCache 00000088 SCB_EnableDCache
00000000 l d .text.SysTick_Config 00000000 .text.SysTick_Config
00000000 l F .text.SysTick_Config 00000044 SysTick_Config
...
00000000 l d .text.lock_crg_key 00000000 .text.lock_crg_key
00000000 l F .text.lock_crg_key 00000024 lock_crg_key
00000000 l d .text.reboot 00000000 .text.reboot
00000000 l F .text.reboot 00000030 reboot
00000000 l d .rodata.name 00000000 .rodata.name
00000000 l d FSymTab 00000000 FSymTab
00000000 l d .text.get_ref_clk 00000000 .text.get_ref_clk
注意:请将上述命令中的"arm-none-eabi-gcc"、"arm-none-eabi-nm"和"arm-none-eabi-objdump"替换成你的工具链中的实际命令。
符号表中的数据类型有哪些?
在ARM GCC生成的符号表中,常见的数据类型标识有以下几种:
'T'或't':表示该符号是在text(代码)段定义的函数或者其他符号;'D'或'd':表示该符号是在数据段定义的已初始化数据;'B'或'b':表示该符号是在BSS段定义的未初始化数据;'C':表示该符号是通用符号;'U':表示该符号在其他文件中定义,即未定义;'W':表示该符号是弱符号,可能在其他文件中被重定义;'N':表示该符号是debugging symbol.。
注意: 大写字母表示全局符号,小写字母表示局部符号。
符号表与map文件什么关系?
符号表和map文件都是在编译链接过程中生成的输出文件,主要用于程序调试和分析。它们之间的关系和区别如下:
-
符号表(Symbol Table):符号表是在编译过程中生成的,主要包含了源代码中定义的函数和变量的信息,如名称、类型、大小、地址等。通过查看符号表,我们可以看到源代码中每个符号在编译后的具体信息,便于我们在调试过程中定位和解决问题。
-
Map文件:Map文件是在链接过程中生成的,主要包含了各个目标文件和库文件在链接过程中的地址分配情况,以及程序的内存布局等信息。通过查看Map文件,我们可以看到程序的具体内存布局,便于我们理解程序的运行过程和优化程序的内存使用。
因此,符号表和Map文件虽然都包含了程序的符号信息,但它们的生成过程和主要用途是不同的,一般来说,符号表主要用于程序调试,而Map文件主要用于程序分析和优化。
上篇文章:ARM 嵌入式 番外篇 编译系列 8 – RT-Thread 编译命令 Scons 详细讲解
相关文章:
【ARM 嵌入式 编译系列 9-- GCC 编译符号表(Symbol Table)的详细介绍】
文章目录 什么是符号表符号表的作用是什么如何生成符号表符号表中的数据类型有哪些?符号表与map文件什么关系? 上篇文章:ARM 嵌入式 番外篇 编译系列 8 – RT-Thread 编译命令 Scons 详细讲解 什么是符号表 在 ARM GCC 中,符号表…...
Apache Doris 入门教程27:BITMAP精准去重和HLL近似去重
BITMAP 精准去重 背景 Doris原有的Bitmap聚合函数设计比较通用,但对亿级别以上bitmap大基数的交并集计算性能较差。排查后端be的bitmap聚合函数逻辑,发现主要有两个原因。一是当bitmap基数较大时,如bitmap大小超过1g,网络/磁盘…...
bug总结
bug总是意外的出现,对于语法问题导致的bug是容易排查的,对于逻辑的bug和环境的bug往往令人头疼。在这里,将这些收集起来。、 【1-8来自对博客认输了!这些Bug让我目瞪口呆!_电脑放青藏高原共振是真的?_Truda.的博客-C…...
DC电源模块的高转换率
BOSHIDA DC电源模块的高转换率 DC电源模块是将交流电转换为直流电供应设备使用的装置,是现代工业制造和电子产品中不可或缺的组件之一。高转换率是DC电源模块最重要的性能之一,它直接影响着电源的效率、功耗和发热等方面,因此也深受设计师的关…...
用于网页抓取的最佳 Python 库
探索一系列用于网页抓取的强大 Python 库,包括用于 HTTP 请求、解析 HTML/XML 和自动浏览的库。 网络抓取已成为当今数据驱动世界中不可或缺的工具。Python 是最流行的抓取语言之一,拥有一个由强大的库和框架组成的庞大生态系统。在本文中,我…...
异步回调中axios,ajax,promise,cors详解区分
Ajax、Promise和Axios之间的关系是,它们都是用于在Web应用程序中发送异步HTTP请求的JavaScript库,但它们有不同的实现方式和用法。 Ajax是一种旧的技术,使用XMLHttpRequest对象来向服务器发送异步请求并获取响应。它通常需要手动编写回调函数…...
IoTDB原理剖析
一、介绍 IoTDB(物联网数据库)是一体化收集、存储、管理与分析物联网时序数据的软件系统。 Apache IoTDB采用轻量式架构,具有高性能和丰富的功能。 IoTDB从存储上对时间序列进行排序,索引和chunk块存储,大大的提升时序…...
中国1990-2021连续30年土地利用数据CLCD介绍及下载
CLCD数据介绍 CLCD(China Land Cover Dataset)数据集由武汉大学黄昕老师公布,黄昕老师基于Google Earth Engine上335,709景Landsat数据,制作中国年度土地覆盖数据集(annual China Land Cover Dataset, CLCD),包含1985+1990—2020中国逐年土地覆盖信息。 为此,黄昕老师…...
Tubi 前端测试:迁移 Enzyme 到 React Testing Library
前端技术发展迅速,即便不说是日新月异,每年也都推出新框架和新技术。Tubi 的产品前端代码仓库始建于 2015 年,至今 8 年有余。可喜的是,多年来紧随 React 社区的发展,Tubi 绝大多数的基础框架选型都遵循了社区流行的最…...
Chrome
Chrome 简介下载 简介 Chrome 是由 Google 开发的一款流行的网络浏览器。它以其快速的性能、强大的功能和用户友好的界面而闻名,并且在全球范围内被广泛使用。Chrome 支持多种操作系统,包括 Windows、macOS、Linux 和移动平台。 Chrome官网: https://ww…...
零代码编程:用ChatGPT批量删除Excel文件中的行
文件夹中有上百个Excel文件,每个文件中都有如下所示的两行,要进行批量删除。 在ChatGPT中输入提示词: 你是一个Python编程专家,要完成一个处理Excel文件内容的任务,具体步骤如下: 打开F盘的文件夹&#x…...
GaussDB数据库SQL系列-UNION UNION ALL
目录 一、前言 二、GaussDB UNION/UNION ALL 1、GaussDB UNION 操作符 2、语法定义 三、GaussDB实验示例 1、创建实验表 2、合并且除重(UNION) 3、合并不除重(UNION ALL) 4、合并带有WHERE子句SQL结果集(UNION ALL) 5、…...
Azure创建第一个虚拟机
首先,登录到 Azure 门户 (https://portal.azure.com/)。在 Azure 门户右上角,点击“虚拟机”按钮,并点击创建,创建Azure虚拟机。 在虚拟机创建页面中,选择所需的基本配置,包括虚拟机名称、操作系统类型和版…...
Redis 之 缓存预热 缓存雪崩 缓存击穿 缓存穿透
目录 一、缓存预热 1.1 缓存预热是什么? 1.2 解决方案: 二、缓存雪崩 2.1 缓存雪崩是什么?怎么发生的? 2.2 怎么解决 三、缓存穿透 3.1 是什么?怎么产生的呢? 3.2 解决方案 3.2.1、采用回写增强&a…...
Golang 程序性能优化利器 PGO 详解(二):收集样本数据和编译
在软件开发过程中,性能优化是不可或缺的一部分。无论是在Web服务、数据处理系统还是实时通信中,良好的性能都是至关重要的。Golang 从1.20版版本开始引入的 Profile Guided Optimization(PGO)机制能够帮助更好地优化 Go 程序的性能…...
《格斗之王AI》使用指南
目录 一、说明 二、步骤 1. 下载 2.配置环境 3.替换 4.测试 5.训练 一、说明 该项目是 针对B站UP主 林亦LYi 的作品 格斗之王!AI写出来的AI竟然这么强!的使用指南,目的是在帮助更多小白轻松入门,一起感受AI的魅力。 林亦LYi…...
创新引领城市进化:人工智能和大数据塑造智慧城市新面貌
人工智能和大数据等前沿技术正以惊人的速度融入智慧城市的方方面面,为城市的发展注入了强大的智慧和活力。这些技术的应用不仅令城市管理更高效、居民生活更便捷,还为可持续发展和创新奠定了坚实的基础。 在智慧城市中,人工智能技术正成为城市…...
iOS开发-处理UIControl触摸事件TrackingWithEvent
IOS BUG记录 之 处理UIControl的点击事件。 UIControl的触摸事件的方法是beginTrackingWithTouch:withEvent:,continueTrackingWithTouch:withEvent:,endTrackingWithTouch:withEvent:,cancelTrackingWithEvent: ##下面简单的介绍一下 beg…...
学无止境·运维高阶⑤(LVS-DR 群集 配置Nginx负载均衡)
LVS-DR 群集 && 配置Nginx负载均衡 一、LVS-DR 群集1、相关配置环境2、在RS上配置并启动脚本2.1相关脚本2.2 启动脚本,另一台RS同样步骤 3、LVS-DR模式配置脚本4、测试 二、Nginx负载均衡1、安装Nginx并关闭相应设置2、向主机 node2,node3 写入内…...
badger的mainfest文件解读
1. mainfest文件的作用 mainfest文件是记录lsm tree中的各层tables表的创建删除记录的一个日志文件,主要的作用是badger数据库重启后,重新恢复内存中的各层tables表 2、内容结构 先是8个字节的魔数,魔数的结构如下 ----------------------…...
用TensorFlow和BERT实战:从海量安全报告中自动提取攻击技战术(TTPs)
基于TensorFlow与BERT的自动化TTPs提取系统实战指南 当安全团队每天需要处理数百份威胁报告时,人工提取攻击技战术(TTPs)的效率瓶颈就会暴露无遗。本文将展示如何构建一个能自动解析安全报告、识别关键攻击模式的智能系统,这套方案…...
ERNIE-4.5-0.3B-PT惊艳效果:方言理解与普通话转写生成能力
ERNIE-4.5-0.3B-PT惊艳效果:方言理解与普通话转写生成能力 1. 引言:当AI听懂你的家乡话 想象一下,你对着手机说了一句地道的家乡方言,屏幕上立刻出现了标准的普通话文字,还能用流畅的普通话回答你的问题。这听起来像…...
S2-Pro YOLOv11目标检测结果分析与报告生成
S2-Pro YOLOv11目标检测结果分析与报告生成 1. 计算机视觉项目的后期处理痛点 在完成目标检测模型的训练和部署后,很多开发者都会遇到一个共同的问题:如何高效处理和分析模型输出的检测结果。传统的做法是手动查看每张图片的检测框,统计各类…...
Qwen-Image-2512-Pixel-Art-LoRA新手教程:Gradio界面快捷键与批量操作技巧
Qwen-Image-2512-Pixel-Art-LoRA新手教程:Gradio界面快捷键与批量操作技巧 1. 引言:从单张生成到高效创作 如果你已经体验过Qwen-Image-2512-Pixel-Art-LoRA,看着它生成一张张复古又可爱的像素画,可能会觉得:“这效果…...
工业检测新思路:LingBot-Depth修复ToF传感器缺失深度
工业检测新思路:LingBot-Depth修复ToF传感器缺失深度 在工业检测领域,你是不是经常遇到这样的头疼事:花大价钱买的ToF深度传感器,一到反光表面或者透明材质上,深度数据就“消失”了一大片,留下一个个黑洞。…...
零基础部署MinerU 2.5-1.2B镜像:轻松实现PDF高质量结构化提取
零基础部署MinerU 2.5-1.2B镜像:轻松实现PDF高质量结构化提取 1. 引言 1.1 为什么需要PDF结构化提取 在日常工作和学习中,PDF文档是最常见的信息载体之一。然而,当我们需要从PDF中提取内容时,经常会遇到以下问题: …...
OWL ADVENTURE像素风AI助手快速上手:零代码部署多模态视觉模型
OWL ADVENTURE像素风AI助手快速上手:零代码部署多模态视觉模型 1. 认识你的像素AI伙伴 想象一下,当你上传一张照片后,一个活泼的像素风格猫头鹰向导会热情地向你打招呼:"旅行者,今天想探索什么有趣的画面呢&…...
2026年04月11日最热门的开源项目(Github)
根据提供的榜单,这里是对各个项目的分析和趋势观察: 1. 热门语言分析 Python 是榜单中最常用的编程语言(例如:NousResearch/hermes-agent, microsoft/markitdown, OpenBMB/VoxCPM等),显示出Python在开发代…...
【AI原生研发黄金标准】:20年架构师亲授7步构建高鲁棒性机器学习流水线(附Gartner验证的CI/CD-ML双轨模型)
第一章:AI原生研发范式的本质跃迁 2026奇点智能技术大会(https://ml-summit.org) AI原生研发范式并非对传统软件工程的渐进优化,而是一场以模型为中心、数据为燃料、反馈为闭环的认知重构。它将AI能力从“辅助工具”升维为系统架构的默认构件——开发流…...
银行数据中心基础设施建设与运维管理【1.1】
1. 3 银行数据中心建设的基本原则 银行数据中心建设在安全生产前提下的发展趋势是 “高效运行、 节能环保”。 为了充分满足银行 IT 设备数量和管理规范性要求都不断增加的需要, 银行在开展数据中心建设过程中, 必须严格遵循各项技术特性和规范标准要求, 以达到集约化、 模…...
