失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 符号表--什么是符号表

符号表--什么是符号表

时间:2022-05-14 19:48:50

相关推荐

符号表--什么是符号表

符号表

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

散列表

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

使用

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

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

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

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

示例

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

Example table

地址 类型 名称

00000020 a T_BIT

00000040 a F_BIT

00000080 a I_BIT

20000004 t irqvec

20000008 t fiqvec

2000000c t InitReset

20000018 T _main

20000024 t End

20000030 T AT91F_US3_CfgPIO_useB

2000005c t AT91F_PIO_CfgPeriph

200000b0 T main

20000120 T AT91F_DBGU_Printk

20000190 t AT91F_US_TxReady

200001c0 t AT91F_US_PutChar

200001f8 T AT91F_SpuriousHandler

20000214 T AT91F_DataAbort

20000230 T AT91F_FetchAbort

2000024c T AT91F_Undef

20000268 T AT91F_UndefHandler

20000284 T AT91F_LowLevelInit

200002e0 t AT91F_DBGU_CfgPIO

2000030c t AT91F_PIO_CfgPeriph

20000360 t AT91F_US_Configure

200003dc t AT91F_US_SetBaudrate

2000041c t AT91F_US_Baudrate

200004ec t AT91F_US_SetTimeguard

2000051c t AT91F_PDC_Open

2000059c t AT91F_PDC_DisableRx

200005c8 t AT91F_PDC_DisableTx

200005f4 t AT91F_PDC_SetNextTx

20000638 t AT91F_PDC_SetNextRx

2000067c t AT91F_PDC_SetTx

200006c0 t AT91F_PDC_SetRx

20000704 t AT91F_PDC_EnableRx

20000730 t AT91F_PDC_EnableTx

2000075c t AT91F_US_EnableTx

20000788 T __aeabi_uidiv

20000788 T __udivsi3

20000884 T __aeabi_uidivmod

2000089c T __aeabi_idiv0

2000089c T __aeabi_ldiv0

2000089c T __div0

200009a0 D _data

200009a0 A _etext

200009a0 D holaamigosh

200009a4 Abss_end

200009a4 A __bss_start

200009a4 Abss_start

200009a4 A _edata

200009a4 A _end

如果觉得《符号表--什么是符号表》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。