zoukankan      html  css  js  c++  java
  • Linux下利用objdump查看文件空间地址分布

    在linux中新建test.c文件,源代码如下:

    1 #include<stdio.h>
    2 int a=1;
    3 int main()
    4 {
    5     printf("a is %d.",a);
    6     return 0;
    7 }

    然后分别生成test.o和test文件

    $ gcc -c test.c
    $ gcc -o test test.c

     利用objdump命令分别查看test.o和test

    首先看test.o

    file format elf64-x86-64:文件所在平台属性,这里是64位x86处理器平台

    Sections:

    Size: 段的大小,字节为单位

    VMA: 段在虚拟地址中的位置

    LMA:段在加载地址中的位置

    File off: File offset,段的起始位置

    Algn:字节对齐方式,2**2表示2的平方即为4,2**3表示2的3次方即为8

    这里面重要的有

    .text(代码段)

    .data(数据段)

    .bss

    查看test文件的空间位置:

    段的数量明显多于未链接文件test.o

     我们将test.c代码复制到test1.c文件,并稍加修改

     

    可以看到,.text代码段和.data数据段大小都增加了,

    .text代码段增大了9字节(22变为31)

    .data数据段增加了一个int型4字节变量大小(源代码中int b=2,多了一个变量b)

    注意.data的File off起始位置为00000074,而不是00000071,这是字节对齐而导致的

    有个待解答问题:

    为什么.text代码段和.data数据段以及其他段的字节对齐方式可以不一样呢?

  • 相关阅读:
    Vue数据双向绑定原理
    JS递归
    JS数据结构-链表
    JS数据结构-树
    React性能优化手段
    Django请求的生命周期
    Devops-git初识
    Django数据迁移的问题
    无监控,不运维!运维监控工具平台建设总结
    数据库-数据类型及主键外键
  • 原文地址:https://www.cnblogs.com/jrglinux/p/6942476.html
Copyright © 2011-2022 走看看