-
动态链接中的装载时重定位10
动态链接模块被装载映射到虚拟空间后,指令部分是在多个进程之间共享的,由于装载时重定位的方法需要修改指令,所以没有办法做到同一份指令被多个进程共享,因为指令被重定位后对于每个进程来讲是不同的。 这句话怎么理解阿?
问题补充:ppgunjack 写道链接库会映射到虚拟地址空间,而对不同进程,该共享库可能映射到不同地址,装载重定位意味着会根据共享库在虚拟地址空间中的装载地址修改共享对象访问的数据地址或跳转指令地址,但这个地址在不同进程空间可能是不一样的,因此这种方式修改的代码不能同时为多个进程所用,应该是这个意思吧
这个理解和我一样,但是还有接下来如何将虚拟地址空间中的地址加载到物理内存。比如p1加在了lib.so,并且将lib.so编译成了地址无关代码,现在p2来了,也要调用lib.so,如何知道mmu已经将lib.so调入内存呢?2011年5月26日 20:31
相关推荐
综上所述,装载时重定位是一种强大的技术,使得共享库可以在现代操作系统中动态地加载到任意的内存地址,并且能够被多个进程共享,从而大大提高了内存和存储资源的利用效率,同时保持了软件系统的灵活性和可扩展性。...
装载器还需要处理程序的重定位,因为程序在内存中的位置可能与链接时的位置不同。此外,动态装载器还负责处理运行时的动态链接,即在程序运行过程中加载和链接所需的库。 《链接器和装载器》这本书可能涵盖了以下...
Linux和GCC支持两种重定位方法:链接时重定位和装载时重定位。链接时重定位在编译阶段就完成重定位,要求使用`-shared -fPIC`选项;而装载时重定位则在程序加载时进行,适用于编译时目标地址不确定的情况。 延迟...
2. **重定位**:链接器和装载器如何修正符号引用,使得程序能在运行时找到正确的地址。 3. **延迟绑定**:在动态链接中,某些符号的绑定可以推迟到实际使用时进行,以提高程序启动速度。 4. **装载地址随机化...
《程序员自我修养——链接装载与库》是计算机科学领域一本重要的技术书籍,主要探讨了程序在计算机系统中的构建、链接和装载过程,以及库在其中的关键作用。这本由Steve McConnel编著的著作深入浅出地讲解了底层编程...
例如,当程序尝试调用一个动态链接的函数时,它首先通过PLT跳转到GOT,如果GOT中还没有该函数的地址,那么动态链接装载器会查找正确的库,解析函数地址,并写入GOT。之后的相同调用就直接从GOT取地址,提高了效率。 ...
链接部分详细介绍了静态链接和动态链接的原理、方法和实现细节,并深入探讨了符号表、重定位表、段表和页表等关键技术。装载部分则主要介绍了操作系统的装载过程,包括文件系统、内存管理、进程调度和系统调用等方面...
- 动态链接器(如`ld-linux.so`)负责在程序启动时解析和装载库,处理符号表和重定位信息。 5. **Windows PE COFF**: - 在Windows操作系统中,可执行文件和动态链接库采用PE(Portable Executable)格式,其内部...
在程序启动时,装载器负责加载可执行文件到内存,解析文件格式,处理重定位信息,将符号表中的地址解析为内存中的实际位置,确保程序能够正确执行。 6. **跨平台编程**: 如Java通过字节码实现了跨平台性,因为...
总结来说,ELF动态解析符号过程是Linux程序执行的关键环节,涉及文件结构、装载、重定位和符号解析等多个方面。elf_hash算法作为符号查找的一部分,通过高效地定位符号表来支持动态链接。理解这些概念对于调试和优化...
8. **装载地址与运行时地址**:链接器通常为程序分配装载地址,而加载器则负责确定运行时的地址,处理重定位信息,使程序能在实际内存中正确运行。 9. **共享对象与插件**:ELF 文件还支持动态加载的共享对象(.so ...
随着虚拟内存和动态地址绑定技术的发展,链接器的工作模式也发生了变化,它可以生成可重定位的可执行文件,允许程序在运行时动态绑定地址。 **链接与加载的区别**: 链接通常在编译过程的后期完成,它将编译器产生...
加载器则负责将链接后的可执行文件加载到内存中,并为程序的执行做好准备,包括地址重定位、动态链接等操作。 ### 地址绑定的历史视角 地址绑定是指将程序中的符号引用与其实际内存地址相匹配的过程。早期的编程...
2. **重定位**:重定位是指链接器调整目标文件中某些地址,以适应程序在内存中的实际布局。编译器通常使用相对于段起始地址的偏移量来表示地址,而链接器则需要根据程序的实际装载位置来更新这些偏移量,使其成为...
- 动态链接时的符号解析和重定位过程。 - 了解装载器如何处理共享库和依赖。 面试过程中,除了理论知识,实际编程能力也很重要。能够编写高质量、可维护的代码,并具备良好的调试技巧,都是面试官关注的点。此外...
- **链接时重定位和加载时重定位**:这两种重定位方式分别在链接阶段和加载阶段完成。 - **符号和段重定位**:除了地址外,符号和段也需要进行重定位。 - **基本的重定位技术**:如相对地址和绝对地址的使用。 - **...
链接器负责处理符号解析(寻找函数和变量的定义)和重定位(确定每个指令和数据在内存中的确切位置)。书中可能涵盖了静态链接和动态链接的概念,动态链接可以节省内存,因为多个程序可以共享同一库,但同时也可能...
动态装载器是操作系统的一部分,负责在程序启动时加载和初始化共享对象,以及在运行时处理符号查找和重定位。在Solaris中,这个角色由ld.so.1承担。 七、安全性与权限管理 Oracle Solaris提供严格的权限和安全机制...