符号表

✍ dations ◷ 2025-12-04 12:19:23 #编译器软件,数据结构

在计算机科学中,符号表是一种用于语言翻译器(例如编译器和解释器)中的数据结构。在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址。

散列表是用来实现符号表的一种常用技术。编译器可能会使用一个很大的符号表来包含所有的符号,或是针对不同的作用域使用层次结构的多个独立的符号表。

目标文件中通常会有一个包含了所有外部可见标识符的符号表。在链接不同的目标文件时,链接器会使用这些文件中的符号表来解析所有未解析的符号引用。

符号表可能只存在于翻译阶段,也可能被嵌入到该阶段的输出文件中,以供后续阶段使用。比如,它可用于交互式的调试器中,也可以在程序执行过程中或结束后提供格式化的诊断报告。

在逆向工程中,许多任务具会通过符号表来检查全局变量和已知函数的地址。如果可执行文件的符号表被strip这样的工具去除掉了,则逆向工程会更加困难。

在进行动态内存分配和变量访问时,编译器需要完成许多任务作,其中扩展的栈模型就需要用到符号表。

下图是一个小程序的符号表。该表是用GNU Binutils中的nm工具生成的。其中有一个数据类型符号(由类型 "D" 表明)和许多函数(自己定义的以及标准库中的)。第一列是每个符号在内存中的位置,第二列是"符号类型",而第三列则是符号名称。通过传递适当的参数,可以按照地址顺序生成该符号表。

相关

  • 杰克逊县杰克逊县(Jackson County, Oregon)是美国俄勒冈州南部的一个县,南邻加利福尼亚州,成立于1852年1月12日。面积7,257平方公里。根据美国2000年人口普查,共有人口19,009人。县治麦德
  • 棉蚜绵蚜(学名:Aphis gossypii)为常蚜科蚜属下的一个种。
  • 托马斯·庚斯博罗托马斯·庚斯博罗(英语:Thomas Gainsborough,1727年5月14日(受洗日)-1788年8月2日)是一位英国肖像画及风景画家。他是皇家艺术研究院的创始人之一,曾为英国皇室绘制过许多作品,并与
  • 合欢合欢树(学名:Albizia julibrissin),常简称为“合欢”,也叫“合昏”、“夜合”,主要是因为它的小叶一到夜晚就闭合到一起。此外还有“绒花树”、“鸟绒”、“马缨花”等名称。花瓣
  • 连平县连平县位于中国广东省北部,属于河源市管辖。东边与广东省和平县相邻,南边与广东省东源县、新丰县相邻,西边与广东省翁源县相邻,北边与江西省龙南县、全南县相连,面积2365平方公里
  • 奥斯卡·里丁奥斯卡·里丁(德语:Oskar Rieding,1840年-1914年)是十九世纪的德国作曲家及小提琴家。由于他长时期居住于匈牙利,令他的音乐亦流露不少当地音乐的元素。里丁出生于施特汀(现今的波
  • 夏洛特黄蜂夏洛特黄蜂(英语:Charlotte Hornets),是一支位于美国北卡罗来纳州夏洛特的NBA篮球队,分属于东部的东南赛区,主场为时代华纳有线球场。球队的拥有者为NBA传奇球星迈克尔·乔丹。原
  • 苏珊娜·什特费采科娃苏珊娜·什特费采科娃(斯洛伐克语:Zuzana Štefečeková,1984年1月15日-),生于尼特拉,是一名斯洛伐克女子射击运动员。她曾参加2008年和2012年两届夏季奥运,两届奥运各获得一枚银牌
  • 柳实冬贵柳实冬贵(日语:柳実 冬貴),日本轻小说作家。居住于千叶县。代表作是曾改编成广播剧CD的《Re: 笨蛋也能拯救世界?》和电视动画的《对魔导学园35试验小队》。早年从国中时期开始写
  • 环球海底光缆环球海底光缆(Fiber-Optic Link Around the Globe,简称:FLAG)是一条长28000千米的连接英国、日本等多个国家的海底光缆网络。由Global Cloud Xchange(英语:Global Cloud Xchange)负