动态加载:A Layer of Indirection
编译时,动态链接库调用 = 查表
call *TABLE[printf@symtab]
链接时,收集所有符号,“生成” 符号信息和相关代码:
#define foo@symtab 1
#define printf@symtab 2
...
void *TABLE[N_SYMBOLS];
void load(struct loader *ld) {
TABLE[foo@symtab] = ld->resolve("foo");
TABLE[foo@printf] = ld->resolve("printf");
...
}