• 一个链接器的实现「一」


    为什么要研究链接器?

      于我来说,最主要的原因就是学习了。

      去年差不多这个时候,我刚进入大学的计算机系,对于如何学习这个专业尚模糊不清。在开学一个月左右的时候,学院为了探索教学改革,要组建一个虚拟的试验班,让一个老师给我们做了一次宣讲(当时没想到这个老师就是给我重大影响的韩老师)。他先说了一些他所遇见的大牛的例子,这些大牛的共同特征就是基础特别好,对于计算机系统的底层非常了解。所以学院希望通过这个试验班,做一些教学方面的探索,看能不能培养出基础扎实的,更优秀的学生。还抛出了三个愿望:操作系统,编译器,数据库,希望我们走一遍,不仅知道他们的运行机制,还要能够动手实践出一个简单可用的版本。

      对韩老师说的打牢基础的说法深以为然。现在IT方面的技术发展很快,封装也是越来越抽象,如何在这种瞬息万变之中积累下真正有用的知识技能,我想唯有以不变应万变,摸清这些知识的根部,才是最好的学习方法。或许最后我们用于工作的是java,是python,是javascript。但是学习汇编,研究操作系统,编译器,会让我们对这些新技术知根知底,进而学习的速度。

      如我研究链接器的参考书《程序员的自修养:链接,装载与库》的作者在序言中说的:

      “我目前从事的工作和系统底层关系不是很大,现在最常用的都是web前端,MySql数据库等这些应用层面的系统。虽然不是直接与系统底层打交道,但是之前的积累无时无刻不在帮助我取生如理解应用开发。比如MySql系统的内存和文件系统的优化,如果对操作系统的虚拟储存和文件系统机制没有深入了解,那么可能只能在配置参数上做一些“猜测”性质的调整,不断地尝试各种参数,或者参考网络上别人提供的配置参数,但不一定适合自己的应用情况。了解虚存如何运作,进程地址空间的分布等,将会对应用的优化,甚至是架构设计上都会有更高层次的俯视。“

    目标:

      一个可用的C链接器,可以链接MiniCRT(64位版)

    资料:

    1. Oracle的《链接程序和库指南》
    2. 《程序员的自我修养:链接,转载与库》
    3. Google

    工具:

    1. archlinux 64位版
    2. eclipse + cdt
    3. readelf
    4. objdump
    5. ghex
    6. nm
    7. gcc
    8. ld
    9. edb

    这个系列的更新我会同时发在博客园和我的独立博客上:nanshu.pw

  • 相关阅读:
    (转)ASP连接sql server实例解析
    (转)ASP与sql存储过程
    将博客搬至CSDN
    详细解析Java中抽象类和接口的区别
    蔬菜销售策划
    医学学习
    mlecms v2.2版权
    网页打印设置
    silverlight RadGridView总结系列(转载)
    silverlight RadGridView总结二(转载)
  • 原文地址:https://www.cnblogs.com/nanshu/p/3231645.html
Copyright © 2020-2023  润新知