C之bss、data存储位置区分,使用objdump -t反汇编查看变量所处存储位置

#include <stdio.h>
#include <stdlib.h>

int wei;               //未初始化的全局变量,bss区
int you = 0;            //初始化为0的全局变量,bss区
int qing = 1;            //初始化非0的全局变量,data区
int main()
{
    static int ai;         //未初始化的静态局部变量,bss区
    static int ni = 0;      //初始化为0的静态局部变量,bss区
    static int everyday = 2;   //初始化为非0的静态局部变量,data区
    int forever;          //栈(stacks)

    return 0;
}
将main.c编译为汇编语言:gcc main.c -o main.o 

objdump -t main.o | grep "\.data"
0000000000600800 l    d  .data  0000000000000000              .data
0000000000600808 l     O .data  0000000000000004              everyday.2553
0000000000600800  w      .data  0000000000000000              data_start
0000000000600800 g       .data  0000000000000000              __data_start
0000000000600804 g     O .data  0000000000000004              qing
objdump -t main.o | grep "\.bss"
0000000000600810 l    d  .bss   0000000000000000              .bss
0000000000600810 l     O .bss   0000000000000001              completed.6364
0000000000600818 l     O .bss   0000000000000008              dtor_idx.6366
0000000000600824 l     O .bss   0000000000000004              ni.2552
0000000000600828 l     O .bss   0000000000000004              ai.2551
0000000000600820 g     O .bss   0000000000000004              you
000000000060082c g     O .bss   0000000000000004              wei

原文地址:https://www.cnblogs.com/weiyouqing/p/12568398.html

时间: 2024-10-04 04:03:27

C之bss、data存储位置区分,使用objdump -t反汇编查看变量所处存储位置的相关文章

mdk keil 指定变量、函数存储位置,使用 Scatter-Loading Description File, __attribute__((&quot;section“))

0. 数据类型说明 主要包括4类: Code (inc. data) ,属于RO,也就是写的函数代码(包括代码中的变量) RO Data , 属于RO,使用const修饰的变量. RW Data, 属于RW,变量. ZI Data,   属于RW,没有初始化的变量. 1. mdk 设置Scatter 文件 默认情况下,片内会有两大存储块IROM(只读存储器RO,用来存常量.代码等),IRAM(读写存储器RW,用来存变量,包括被默认初始化为0的变量),如下图 "Target"选项卡. 来

JVM存储位置分配——java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配

Java中的变量根据不同的标准可以分为两类,以其引用的数据类型的不同来划分可分为“原始数据类型变量和引用数据类型变量”,以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”. 根据“Java中的变量与数据类型”中的介绍,“变量是在内存中分配的保留区域的名称.换句话说,它是一个内存位置的名称”,也就是说我们通过这个变量名字就可以找到一个指向这个变量所引用的数据的内存指针,根据变量的类型我们可以知道这个指针之后的几个字节里存储了这个变量所引用的数据. 所以,了解变量在方法区.栈内存.堆内存

OC高级编程——深入block,如何捕获变量,如何存储在堆上

首先先看几道block相关的题目 这是一篇比较长的博文,前部分是block的测试题目,中间是block的语法.特性,block讲解block内部实现和block存储位置,请读者耐心阅读.具备block基础的同学,直接调转到block的实现 下面列出了五道题,看看能否答对两三个.主要涉及block栈上.还是堆上.怎么捕获变量.答案在博文最后一行 //-----------第一道题:-------------- void exampleA() { char a = 'A'; ^{ printf("%

Discuz X1.5 利用添加好友处存储xss进行蠕虫worm扩散

Discuz X1.5 在添加好友的地方有处存储xss,借助此处xss跟用户交互可以进行蠕虫指数扩散. 位置在添加好友处 x完之后的效果 点击后触发 ok 借助此存储xss,我们进行worm传播,dz的会话cookie是被打伤http-only的,但是xss的效果是获取你当前域下的用户会话的权限.这不干扰我们worm的进行. step 1 : attacker 发送带xss worm payload给 用户a, step 2 : 用户A点击后,自身作为宿主去添加其他人为好友,并且附带攻击payl

怎么移动dwg文件查看器中的图形位置

一张图纸中包括图形和文字,图形可以让读者更加容易理解,而文字则是起到了一个解释性的作用.在电脑中打开CAD图纸,需要用到dwg文件查看器,制作过CAD的朋友们都知道CAD文件的格式是dwg格式.图纸中的图形有的时候不在适合位置,就需要把他移动到一个合适的位置上,那么,如何移动呢,来看看具体的操作方法. 如果想要将CAD图形对象移动到指定位置,那么只需要使用迅捷CAD编辑器就可以对CAD图形对象进行移动操作,这是一款专业的CAD编辑软件,软件不仅可以用来浏览和查看DWG.DXF等CAD文件格式,还

用MFC完成一个简单的猜数字游戏: 输入的四位数中,位置和数字都正确为A,数字相同而位置不同的为B。

最近学习了MFC一些比较基础的知识,所以打算通过做一个简单的数字游戏来理解MFC的流程并进一步熟悉其操作. 在这里,我做了一个猜数字的小游戏.第一步当然是设计主界面,先给大家展示一下游戏界面: 主界面: 从这个主界面可以看到,它包含标题,菜单栏,工具栏. 标题是给人一个认识,这是什么游戏,标题设置为:“猜数游戏”: 而菜单栏和工具栏才是游戏的核心,它要保证能够完成游戏的基本功能. 菜单栏和工具栏是对应的,包含了”start“,"help","restart"这三个菜

C语言之变量类型和存储方式

变量可以分为全局变量.静态全局变量.局部变量和静态局部变量 变量的声明有两种情况: 1.一种是需要建立存储空间的(定义性声明).例如int a 在生命的时候就已经建立了存储空间. 2.另一种是不需要建立存储空间的(引用性声明).例如extern int a 其中变量a是在别的文件中定义的. 内存区域的划分: 1.栈区:由编译器自动分配和释放的内存区域,用于存放函数的参数值.局部变量等. 2.堆区:程序员向系统申请或释放. 3.全局区:用来保存全局变量和静态变量. 4.文字常量区:用来保存常量字符

[ jquery 选择器 :nth-last-of-type() ] 选取指定(p)父元素下的从后向前数的指定第一个子元素(无关目标元素在父元素中所处的位置)

选取指定(p)父元素下的从后向前数的指定第一个子元素(无关目标元素在父元素中所处的位置): 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta http-equiv='keywords' conte

如何在JS数组特定索引处指定位置插入元素?

需求: 将一个元素插入到现有数组的特定索引处.听起来很容易和常见,但需要一点时间来研究它. // 原来的数组var array = ["one", "two", "four"];// splice(position, numberOfItemsToRemove, item)// 拼接函数(索引位置, 要删除元素的数量, 元素)array.splice(2, 0, "three"); // www.jbxue.comarray;