符号表

✍ dations ◷ 2025-12-09 02:30:26 #编译器软件,数据结构

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

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

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

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

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

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

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

相关

  • 触电遭雷击的患者,腿部表面有红色条状痕即电流流经的痕迹 。触电是指当生物(主要指人类)与电有直接的接触时,因此感受到疼痛或甚至受到伤害的意外事故。被雷电击中(简称雷击)也属于触
  • 圣马可斯圣马可斯 (San Marcos),是美国加州圣迭戈县圣迭戈的一个郊区城市。截至2010年的人口普查,全市约有人口83,781。圣马科斯东连埃斯孔迪多,西接卡尔斯巴德。圣马科斯位于33°8′31
  • 摩西湖市摩西湖市(Moses Lake)位于美国华盛顿州格兰特县。美国2010年人口普查时人口为20,366人。摩西湖市是格兰特郡最大的城市。摩西湖市有一个姊妹市:摩西湖市与米泽市之间有很长的历
  • 砷的同位素砷(原子量:74.92160(2))共有43个同位素,其中有个1同位素是稳定的。备注:画上#号的数据代表没有经过实验的证明,只是理论推测而已,而用括号括起来的代表数据不确定性。
  • 若泽·拉莫斯·奥尔塔若泽·曼努埃尔·拉莫斯·奥尔塔(José Manuel Ramos-Horta,1949年12月26日-),东帝汶政治家,日本法政大学名誉博士。先后担任过东帝汶外交部长、东帝汶总理、东帝汶总统,诺贝尔和平
  • 水马 (路障)水马(英语:Water-Safety Barriers、Water-filled Barrier、Plastic traffic barrier、water-barrier、plastic water buffer或Water Protect Hurdle),或称灌水式活动隔(护)栏,多以
  • 丁二酸酐丁二酸酐,别名琥珀酸酐,是琥珀酸自身脱水缩合形成的环状酸酐,分子式为C4H4O3。它与热水反应生成丁二酸,与氨反应生成琥珀酰亚胺,是有机合成重要的中间体,在医药工业上主要用于合成
  • 伊克赛尔 (阿拉巴马州)伊克赛尔(英文:Excel),是美国阿拉巴马州下属的一座城市。面积约为1.65平方英里(约合 4.27平方公里)。根据2010年美国人口普查,该市有人口723人,人口密度为438.71/平方英里(约合169.32
  • 萨瓦前阿尔卑斯山脉萨瓦前阿尔卑斯山脉(法语:Préalpes de Savoie;德语:Savoyer Voralpen;意大利语:Prealpi di Savoia)是欧洲中部的山脉,属于西阿尔卑斯山脉的一部分,横跨法国和瑞士,最高点海拔高度3,25
  • 安德烈亚·科帕西埃凡迪安德烈亚斯·科帕西斯(希腊语:Ανδρέας Κοπάσης;1856年-1912年3月22日),土耳其语称安德烈亚·科帕西埃凡迪(土耳其语:Andreya Kopasi Efendi)。奥斯曼帝国萨摩斯大公。