ZHCADC4A September 2011 – March 2014
Linux 采用有关符号解析的约定,动态链接保留静态链接的行为。当同一符号有多个定义时,就会发生抢占:具体来说是指,库中定义的符号被早期 可执行文件或库中的定义屏蔽。所谓早期,根据的是可执行文件及其依赖库形成的依赖树建立的广度优先顺序。
只有对符号的所有引用(甚至定义它的模块中的引用)都使用基于 GOT 的寻址时,此符号才能被抢占。动态链接器通过直接将覆盖符号的地址修补到 GOT 的适当槽中来执行抢占。