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)

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

  • 相关阅读:
    yii 引入文件
    CodeForces 621C Wet Shark and Flowers
    面试题题解
    POJ 2251 Dungeon Master
    HDU 5935 Car(模拟)
    HDU 5938 Four Operations(暴力枚举)
    CodeForces 722C Destroying Array(并查集)
    HDU 5547 Sudoku(dfs)
    HDU 5583 Kingdom of Black and White(模拟)
    HDU 5512 Pagodas(等差数列)
  • 原文地址:https://www.cnblogs.com/pacoson/p/4893172.html
Copyright © 2011-2022 走看看