GOT编程是指GNU通用命名空间动态链接库(GNU General Utilities Namespace Dynamic Linking Library)中的一项功能。它通过优化符号重定向过程提高执行速度,同时还能够提高代码的可读性和可维护性。
在传统的C程序中,符号引用和符号定义之间的对应关系是在链接时确定的。在动态链接库中,符号引用和符号定义之间的对应关系是在运行时确定的。当一个程序需要引用一个函数、变量时,需要进行符号重定向,以确定它们的实际地址。
而GOT编程通过将符号引用的地址存储在GOT表中,在程序执行时直接访问该表来完成符号重定向的过程,避免了符号重定向时的计算,从而优化了程序的执行速度。
GOT编程的实现原理是基于“全局偏移表”(Global Offset Table,简称GOT)和“过程链接表”(Procedure Linkage Table,简称PLT)实现的。
当程序需要调用一个动态链接库中的函数时,它会首先跳转到PLT中对应的条目,在经过一系列指令后,会跳转到GOT表中的对应条目,从而定位到符号的实际地址。随后,程序再次跳转到该地址,完成函数调用的过程。