Szimbólum táblázat

Az informatikában a szimbólumtábla (az angol  szimbólumtáblázatból "table of identifiers") egy fordító ( fordító vagy értelmező ) által használt adatstruktúra , amelyben a forráskódból származó minden változó vagy függvényazonosító hozzá van rendelve az adott változóhoz kapcsolódó információhoz. deklaráció vagy megjelenés a kódban : adattípus , hatókör és bizonyos esetekben a memória helye ( offset ).

Megvalósítás

Egy gyakran használt megvalósítás a hash tábla . A fordító használhat egyetlen táblázatot a szimbólumokhoz, vagy különítheti el a szimbólumokat több hierarchikus táblázatba a különböző hatóköröknek megfelelően . Vannak megvalósítások fák, lineáris és önszerveződő listák formájában is.

Alkalmazás

Az objektummodul (eng. object file) tartalmaz egy szimbólumtáblázatot a külsőleg látható (nyilvános) azonosítókhoz. Különböző objektummodulok összekapcsolásakor ( linkelésekor ) a linker szimbólumtáblázatokat használ a modulok közötti hivatkozások feloldására.

A szimbólumtábla csak a fordítás idejére létezhet, de néha beágyazódik a folyamat kimenetébe későbbi felhasználás céljából, például az interaktív hibakeresés során , vagy forrásként szolgál a diagnosztikai jelentés formázásához a program végrehajtása közben vagy után.

A visszafejtés során sok segédprogram táblázatot használ annak ellenőrzésére, hogy mely címek tartoznak a globális változókhoz és az ismert függvényekhez. Ha a szimbólumtáblázatot eltávolítottuk az objektummodulokból a linkelés előtt (például a GNU binutils csíkjával ), akkor a segédprogramok nehezebben tudják meghatározni a program fontos helyeinek címét és elemezni azt.

A változókhoz való hozzáférés és a memória dinamikus lefoglalása során a fordítónak sok munkát kell végeznie, ezért a dinamikus allokációval rendelkező bővített veremmodellhez szimbólumtáblázatra van szükség.[ tiszta ]

A szimbólumtábla használatának jó példája a Unix család moduláris kerneljeként szolgálhat : a szimbólumtáblázatot betölthető kernelmodulok (például illesztőprogramok) használhatják bizonyos karakterek eléréséhez. Ez azonban nem szükséges, ha a modul nem éri el a kernelt, nem használ belső függvényeket, változókat stb. [1] Lehetséges a szimbólumtábla nélkül is, és közvetlenül hozzáférni a kernelen belüli memóriához, de ebben az esetben a modulok hordozhatósága elvész, mivel különböző kernelkonfigurációk esetén ugyanaz a kód különböző helyekre kerül.

Példa

Az alábbiakban egy kis program szimbólumtáblázata található. Létrehozásához a GNU binutils csomag nm segédprogramját használták . A táblában egy adatszimbólum van megjelölve ("D" típusúként) és sok funkció (mind a standard könyvtárból, mind pedig magához a programhoz tartozik). Az első oszlop a memóriában lévő eltolás címét tartalmazza, a második oszlop a szimbólumtípust , a harmadik oszlop pedig a nevét.

táblázat példa
Cím Típusú Név
00000020 a T_BIT
00000040 a F_BIT
00000080 a HARAPTAM
20000004 t irqvec
20000008 t fiqvec
2000000 c t InitReset
20000018 T _fő
20000024 t vége
20000030 T AT91F_US3_CfgPIO_useB
2000005c t AT91F_PIO_CfgPeriph
200000b0 T fő-
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 _adat
200009a0 A _etext
200009a0 D holaamigosh
200009a4 A __bss_end__
200009a4 A __bss_start
200009a4 A __bss_start__
200009a4 A _edata
200009a4 A _end

Lásd még

Jegyzetek

  1. Jonathan Corbet, Alessandro Rubini, Greg Kroah-Hartman. Ch. 2: Modulok összeállítása és elindítása; Kernel szimbólumtábla // Linux-eszköz-illesztőprogramok, harmadik kiadás . - O'Reilly Media, 2005. - ISBN 0-596-00590-3 . Archiválva : 2014. március 28. a Wayback Machine -nál