zoukankan      html  css  js  c++  java
  • 可重定位目标文件

    【0】GCC将源代码转化成可执行代码的流程

    • (1)C预处理器cpp扩展源代码,插入所有用#include命令指定的文件,并扩展声明的宏;
    • (2)编译器ccl产生两个源代码的汇编代码:*.s;
    • (3)汇编器as将汇编代码转化为二进制目标代码 :*.o ; (目标代码是机器代码的一种形式,它包含所有指令的二进制表示,但没有填入地址的全局值)
    • (4)链接器ld将目标代码与实现库函数的代码合并,最终产生可执行代码文件;

    【1】第一步,源码演说

    这里写图片描述

    【2】生成目标文件p107.o 及对其反汇编

    2.1) gcc -O1 -c p107.c 》》 产生目标文件 p107.o (注意,此时还没有链接)

    2.2) objdump -d p107.o >> p107-obj-dis.s 反汇编目标文件p107.o 得到 p107-obj-dis.s 如下:

    这里写图片描述

    【3】生成可执行文件p107及对其反汇编

    3.1) gcc -O1 -o p107 p107.o p107-main.c 生成可执行文件p107(注意, 此时已经经过链接过程了)

    3.2) objdump -d p107 >> p107-exe-dis.s 反汇编可执行文件 p107 , 得到p107-exe-dis.s 汇编文件,该文件内容如下:

    这里写图片描述

    【4】比较p107-obj-dis.s 和 p107-exe-dis.s

    这里写图片描述

    【总结】

    一句话说完,重定位目标文件是汇编器 使用编译器输出的汇编语言输出的二进制目标文件, 要知道目标文件使用的是相对物理(内存)地址,重定位的目的就是变相对物理地址到绝对物理地址。(bingo)

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    linux 中mysql的安装过程
    HashMap和Hashtable的区别
    SVN服务器配置(svn1.4.6+apache2.2.8 no ssl)
    ArrayList Vector LinkedList 区别与用法
    java中equals和==的区别
    flash滤镜
    AS3显示对象
    feathers ui 鼠标移出事件
    Flex 中可以应用于 ActionScript 类的元标签
    pureMVC与RobotLegs actionscript MVC框架对比
  • 原文地址:https://www.cnblogs.com/pacoson/p/4893172.html
Copyright © 2011-2022 走看看