美文网首页
各种变量类型在程序中的位置&&查看程序的段信息,objdump命

各种变量类型在程序中的位置&&查看程序的段信息,objdump命

作者: sgy1993 | 来源:发表于2017-07-26 10:26 被阅读0次

主要有以下几种变量#

1.全局变量

1.1 未初始过的全局变量
1.2 初始过的全局变量,其值为0
1.3 初始过的全局变量,其值不为0

1.4 未初始过的静态全局变量
1.5 初始过的静态全局变量,值不为0
1.6 初始过的静态全局变量,值不为0

2.局部变量

2.1 未初始过的局部变量
2.2 初始过的局部变量,其值为0
2.3 初始过的局部变量,其值不为0

2.4 未初始过的静态局部变量
2.5 初始过的静态局部变量,其值为0
2.6 初始过的静态局部变量,其值不为0

//exam1.c
#include <stdio.h>


int var_global_init_0 = 0;
int var_global_init = 2;
int var_global_un_init;
static int var_static_global_un_init;
static int var_static_global_init = 5;
static int var_static_global_init_0 = 0;
int func()
{
    static int var_static_local_un_init;
    static int var_static_local_init = 5;
    static int var_static_local_init = 0;
    return 0;
}

int main()
{
    func();
    return 0;
} 

对编译过后的文件使用命令objdump -t命令全不信息

book@book-desktop:~/exam/inline_asm$ objdump -t exam1_elf

exam1_elf:     file format elf32-little

SYMBOL TABLE:
00008074 l    d  .text  00000000 .text
000100a8 l    d  .data  00000000 .data
000100b8 l    d  .bss   00000000 .bss
00000000 l    d  .comment       00000000 .comment
00000000 l    d  *ABS*  00000000 .shstrtab
00000000 l    d  *ABS*  00000000 .symtab
00000000 l    d  *ABS*  00000000 .strtab
00000000 l    df *ABS*  00000000 exam1.c
000100b8 l     O .bss   00000000 $d
000100a8 l     O .data  00000000 $d
000100ac l     O .data  00000004 var_static_global_init
000100bc l     O .bss   00000004 var_static_global_init_0
000100c0 l     O .bss   00000004 var_local_un_init.0
000100b0 l     O .data  00000004 var_local_init.1
000100c4 l     O .bss   00000004 var_local_init_0.2
000100c8 l     O .bss   00000004 var_static_local_un_init.3
000100b4 l     O .data  00000004 var_static_local_init.4
000100cc l     O .bss   00000004 var_static_local_init_0.5
00008074 l     F .text  00000000 $a
000100d0 l     O .bss   00000004 var_static_global_un_init
000100a8 g     O .data  00000004 var_global_init
000100a8 g       .data  00000000 __data_start
000100b8 g       *ABS*  00000000 __bss_start__
00008074 g     F .text  00000018 func
000100d8 g       *ABS*  00000000 __end__
000100d8 g       *ABS*  00000000 __bss_end__
000100b8 g       *ABS*  00000000 __bss_start
000100d8 g       *ABS*  00000000 _bss_end__
000100d4 g     O .bss   00000004 var_global_un_init
000100d8 g       *ABS*  00000000 _end
000100b8 g       *ABS*  00000000 _edata
000100b8 g     O .bss   00000004 var_global_init_0
0000808c g     F .text  0000001c main


book@book-desktop:~/exam/inline_asm$ 

.bss段中包含哪些内容
 var_static_global_init_0
 var_static_global_un_init
 var_global_un_init
 var_global_init_0
 var_local_un_init.0
 var_local_init_0.2
 var_static_local_un_init.3
 var_static_local_init_0.5

book@book-desktop:~/exam/inline_asm$ objdump -t exam1_elf | grep "\.bss"
000100b8 l    d  .bss   00000000 .bss
000100b8 l     O .bss   00000000 $d
000100bc l     O .bss   00000004 var_static_global_init_0
000100c0 l     O .bss   00000004 var_local_un_init.0
000100c4 l     O .bss   00000004 var_local_init_0.2
000100c8 l     O .bss   00000004 var_static_local_un_init.3
000100cc l     O .bss   00000004 var_static_local_init_0.5
000100d0 l     O .bss   00000004 var_static_global_un_init
000100d4 g     O .bss   00000004 var_global_un_init
000100b8 g     O .bss   00000004 var_global_init_0

.data段中包含哪些内容
 var_static_global_init
 var_local_init.1
 var_static_local_init.4
 var_global_init

book@book-desktop:~/exam/inline_asm$ objdump -t exam1_elf | grep "\.data"
000100a8 l    d  .data  00000000 .data
000100a8 l     O .data  00000000 $d
000100ac l     O .data  00000004 var_static_global_init
000100b0 l     O .data  00000004 var_local_init.1
000100b4 l     O .data  00000004 var_static_local_init.4
000100a8 g     O .data  00000004 var_global_init
000100a8 g       .data  00000000 __data_start

结论:经过实验发现初始化过的变量(初始值不为0)不管是局部,还是静态还是全局都会存放在data段中

未初始化和初始化为0的变量都存在bss段里面

相关文章

  • 各种变量类型在程序中的位置&&查看程序的段信息,objdump命

    主要有以下几种变量# 1.全局变量1.1 未初始过的全局变量1.2 初始过的全局变量,其值为01.3 初始过的全局...

  • python的不可变数据类型

    不可变数据类型分析, 先看一段程序 上面这段程序都是对不可变数据类型中的int类型的操作,id()查看的是当前变量...

  • 使用 objdump -t 查看变量所处存储位置

    使用 objdump -t 命令查看变量内容所处存储位置: 可以直接搜索变量名,找到对应内容的存储位置。

  • python数据类型

    1 变量 对象有类型,变量无类型,变量只是对象的一个标签。 每个变量中存储一个值----与变量相关的信息。 程序中...

  • Python程序基本组成与输入输出

    变量与类型 在python程序中,一切数据结构都是存储在堆空间中的对象。python程序中的变量都是引用变量,可以...

  • Python程序的组成

    变量与类型 在python程序中,一切数据结构都是存储在堆空间中的对象。python程序中的变量都是引用变量,可以...

  • Swift:(三)数据类型

    Swift 数据类型 在我们使用任何程序语言编程时,需要使用各种数据类型来存储不同的信息。 变量的数据类型决定了如...

  • Swift:基础(三)数据类型

    Swift 数据类型 在我们使用任何程序语言编程时,需要使用各种数据类型来存储不同的信息。 变量的数据类型决定了如...

  • Swift 数据类型

    Swift数据类型 在我们使用任何程序语言编程的时候,需要使用各种数据类型来存储不同的信息。变量的数据类型决定了如...

  • Linux 查看依赖库

    1.查看依赖的库:objdump -x xxx.so | grep NEEDED 2.查看可执行程序依赖的库:ob...

网友评论

      本文标题:各种变量类型在程序中的位置&&查看程序的段信息,objdump命

      本文链接:https://www.haomeiwen.com/subject/htjnkxtx.html