zoukankan      html  css  js  c++  java
  • 一个链接器的实现「一」

    为什么要研究链接器?

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

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

      对韩老师说的打牢基础的说法深以为然。现在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

  • 相关阅读:
    JavaScript 随机产生十个整数,放入数组中,对这个数组进行降序排序,并获取到这个数组的最大值和最小值
    JavaScript输出换行
    JavaScript超时调用、间歇调用
    JavaScript内置对象
    JavaScript事件列表
    JavaScript 中 for-in和 for-of 的区别
    JavaScript break指定标签打破多层循环示例
    初识JavaScript
    HTML + CSS CSS设置背景图片后图片没有铺满屏幕等
    设计模式之工厂模式
  • 原文地址:https://www.cnblogs.com/nanshu/p/3231645.html
Copyright © 2011-2022 走看看