实现运行库和应用代码分离
大型项目内部也可以内部分解
和 ELF battle 的每一年:讲着讲着就讲不下去了
GOT[0]
, GOT[1]
, ... ???换一种方法
动态链接的符号查表就行了嘛 。
DL_HEAD
LOAD("libc.dl") # 加载动态库
IMPORT(putchar) # 加载外部符号
EXPORT(hello) # 为动态库导出符号
DL_CODE
hello:
...
call DSYM(putchar) # 动态链接符号
...
DL_END
.dl
文件配齐全套工具链编译器
binutils
和最重要的
存储保护和加载位置
允许自由指定加载器 (而不是 dlbox)
空间浪费
其他:不那么重要
#define DSYM(sym) *sym(%rip)
DSYM 是间接内存访问
extern void foo();
foo();
一种写法,两种情况