【问题标题】:Does the every reference have symbol entry每个引用是否都有符号条目
【发布时间】:2021-04-25 04:03:14
【问题描述】:

现在我正在阅读计算机系统:程序员的观点,以及第 7 章链接。 有reference、symbol和entry相关的知识,书中提到的是Entry有symbol的定义,我的想法是“每个symbol都有entry,entry有symbol reference就像指针,这个reference其实有一些地址”。 因此,每次阅读代码相关的全局变量或函数/过程,其实都可以看作是对应的入口,里面有符号引用等信息。

最后,我的想法是对的吗?我可以继续这个想法吗?真的很想了解所有关于计算机系统和技术相关的编程。enter image description here

哦~最后一个问题,.symtab 部分的符号表和重定位条目表一样吗?

【问题讨论】:

    标签: linker


    【解决方案1】:

    请避免将 symbolentry 相关联。 entry 一词在大多数链接器中保留用于指定整个链接程序的 入口点,即在程序执行开始时执行的第一条指令的地址。我更喜欢用 records 来表示排列成表格的项目,例如 symbol table

    当你在你的程序中创建一个过程或函数时,它会在程序运行时被加载到内存中的某个地址。您不知道该过程在运行时的确切位置(在哪个数字地址),这就是您给该地址一个符号名称(标签)的原因。那是 symbol - 程序中某个位置(地址符号)或常数值(标量符号)的人类可读的名称。
    您可以调用该过程或在写入时使用其符号名称引用它:CALL MyProcedure
    MOV register,MyProcedure。同样,MyProcedure 地址的最终值还不知道,所以编译器暂时将 0 放入指令体而不是这个地址,并在 重定位表 中创建一个重定位记录。每个这样的记录指定1)指向指令体内临时0的指针,以及
    2)以符号表索引的形式指定目标符号。
    全局符号,如MyProcedure,在程序中应该是唯一的,但可能会被多次引用,每次引用都会在重定位表中创建一条记录。 符号和重定位的关系不是1:1的。

    当链接器有足够的信息来决定每个符号的最终地址时,它将通过重定位表并将代码中的临时0替换为符号的最终地址。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-11
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 2022-01-22
    • 2012-05-20
    相关资源
    最近更新 更多