[quote=引用 2 楼 wsx199397 的回复:] [quote=引用 1 楼 paschen的回复:]因为A、B 和 C、D 的代码有重叠部分,你的p3程序同一个地址上只能放一个,否则你的指针去取这个地址取到的是哪个动态库
PIC 代码就重定位项少一点, 加载起来方便点而已, M$Win 的DLL不是PIC代码, 不照样跑的好好的么... 各个进程地址空间是隔离的, 缺省指定的 DLL 基址被占用就换个地呗, 做下重定位就是了, 只是修改过后的页在不同进程间就不是共享的了... 在 x86 这种寄存器少的可怜还不能用ip做基址寄存器的破机器上, 生成 PIC代码时还得用本来就很少了的寄存器保存GOT表基址, 太浪费了些... 不过如果要手工写个 elf/pe loader 啥的, 用PIC代码倒是方便多了...
因为A、B 和 C、D 的代码有重叠部分,你的p3程序同一个地址上只能放一个,否则你的指针去取这个地址取到的是哪个动态库
[quote=引用 1 楼 paschen的回复:]因为A、B 和 C、D 的代码有重叠部分,你的p3程序同一个地址上只能放一个,否则你的指针去取这个地址取到的是哪个动态库
The Intel 64 and IA-32 Architectures Software Developer's Manual
69,373
社区成员
243,080
社区内容
加载中
试试用AI创作助手写篇文章吧