摘要: 在内存中加载目标模块时,数据段与代码段的距离总是保持不变。 (目标模块:你要加载进内存的模块) 与绝对内存地址无关 (不然程序就难以在代码段中引用数据段的数据) 利用这一点, 编译器会在目标模块的数据段的开始创建一个表,用于存放(被加载的)目标模块需要的全局数据目标(函数或变量)。 这个表叫全局偏移量表(GOT)。 GOT中每个被目标模块引用的全局数据目标都有一个8个字节的条目(全局数据目标的绝对地址)。 编译器会为每个条目生成重定位记录,使得它(指条目)为正确的绝对地址。 我们写的代码会通过GOT间接访问全局数据目标。 这样的话全局数据目标即使在其他模块也能被正确引用。 阅读全文
posted @ 2019-11-25 18:17 树行云 阅读(1153) 评论(0) 推荐(0) 编辑