符号表

✍ dations ◷ 2025-12-02 01:32:57 #编译器软件,数据结构

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

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

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

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

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

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

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

相关

  • 迷幻药物迷幻药物是指主要功效为改变认知与知觉的精神药品,与游离药品(dissociatives)、致谵妄药三者因能诱发幻觉而包含在致幻剂这一门类下。相较兴奋剂或鸦片类药物等影响意识状态效
  • 跑步的定义是指陆生动物使用足部,移动最快捷的方法。它在运动上的定义是一种步伐,有时双脚不会同一时间碰到地面。它亦是一种有氧的运动或无氧的运动。跑步是整个身体协调的过
  • 体能体适能(英语:Physical Fitness),为身体适应外界环境之能力,可视为身体适应生活、运动与环境 (例如,温度、气候变化或病毒等因素)的综合能力。它包含了两个面向,一般素质(身体健康的状
  • 划船划船是一项依靠桨(英语:Oar)在水中的运动来推动船只的活动,它通过划水来推动船只前进。其中的桨可以是通过机械连接在船上的,或者是手持的(没有与船的机械连接)。本条目涉及的是更
  • 核连锁反应核链式反应(英文:Nuclear chain reaction),又称链式反应,是当发生一个核反应,两个或以上的周边核反应被触动,从而带动其他核反应以指数形式增长。1933年由核物理学家利奥·西拉德构
  • 大林猪大林猪(学名:Hylochoerus meinertzhageni),是偶蹄目猪科大林猪属中唯一的一种,分布于西非和中部非洲地区。其种加词“meinertzhageni”得名于英国军官及动物学家理查德·梅纳茨哈
  • 聚合钻石纳米棒聚合钻石纳米棒(英语:Aggregated diamond nanorods,又称钻石纳米棒聚合体,简称ADNR),是一种纳米级晶型钻石,又称纳米钻石(nanodiamond)或超钻石(hyperdiamond)。聚合钻石纳米棒是于2003
  • .mt.mt为马耳他国家及地区顶级域(ccTLD)的域名。A .ac .ad .ae .af .ag .ai .al .am .ao .aq .ar .as .at .au .aw .ax .az  B .ba .bb .bd .be .bf .bg .bh .bi .bj .bm .bn
  • 基塞尔基塞尔(爱沙尼亚语:kissell,芬兰语:kiisseli,Template:Lang-ltg,拉脱维亚语:ķīselis,立陶宛语:kisielius,波兰语:kisiel,俄语:кисель,,乌克兰语:кисiль)是一种用水果制作的甜点
  • 打印维基百科打印维基百科(英语:Print Wikipedia),是由麦克·曼丁伯格(英语:Michael Mandiberg)创作的艺术项目。他尝试把《维基百科》这个网络百科全书中的1,150万条英文条目打印出来,为此他耗