标题:全局变量怎么不在数据段(.data)中呢?
只看楼主
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
 问题点数:0 回复次数:14 
全局变量怎么不在数据段(.data)中呢?
对代码
int g_iShared = 0;
int main()  
{  
    g_iShared = 200;  
    int iLocal  = 300;
    printf("%d,0x%p\n",g_iShared,&g_iShared);  
    //printf("%d,0x%p\n",iLocal,&iLocal);
    return 0;

}
反汇编,看到 g_iShared  被安排在代码段(.text)中,而不是数据段(.data)中,这个是为什么呢?

[[it] 本帖最后由 vfdff 于 2008-10-30 00:40 编辑 [/it]]

globe.JPG (16.82 KB)
搜索更多相关主题的帖子: 代码段 数据段 全局变量 
2008-10-30 00:38
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
好像确实 数据段(.data)中的才是正真的 全局变量地址
因为这个代码段(.text)中的初始值和程序中指定的初始值不一样,应该不是

但是有点奇怪,为什么这个反汇编刚好把这个代码段(.text)的变量名和程序中变量名一样
而 数据段(.data)中的名称反而不一样

地址.JPG (22.1 KB)

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-10-30 00:53
asd6791868
Rank: 1
来 自:逆流
等 级:新手上路
帖 子:362
专家分:7
注 册:2008-7-27
得分:0 
我也很想知道!

─條路 :  ┈片天  ┈個人  ─瞬間:
2008-10-30 08:33
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
得分:0 
首先,并没有规定什么段就必须是什么变量
其次,那个似乎标的不对,那个地址是_atexit_rtn变量,是CRT的一个全局变量,而不是你的。
第三,你换个编译器编译一下看看吧……
2008-10-30 08:37
hxlou520
Rank: 1
来 自:中國_廈門
等 级:新手上路
帖 子:116
专家分:0
注 册:2008-8-29
得分:0 
我想知道這程序主要是實現什麼功能?

只要我用心,沒有不成功.
在學習中不斷失敗,必然是提高自己的一種手段.
2008-10-30 08:57
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
得分:0 
我调试的结果,全局变量在bss段。
2008-10-30 09:11
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
在 bss 段 是因为你没有初始化

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-10-30 12:54
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
回复 2# 的帖子
你这个是什么反汇编工具??

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-10-30 12:57
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
得分:0 
LS:我用的你的代码,一行未改。
但是我用了O2优化,可能把初始默认值优化成复制语句了吧……
2008-10-30 19:21
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
得分:0 
我使用 OllyDbg ,看到这个 0x00407030 就是(.data空间)

而且可以看到 407030 地址上数据就是0x99 (我修改了代码的初始值,为方便观察)
修改后:
#include <stdio.h>

int g_iShared = 0x99; // 修改 初始值
int main()  
{  
    g_iShared = 200;  
    int iLocal  = 300;
    printf("%d,0x%p\n",g_iShared,&g_iShared);  
    //printf("%d,0x%p\n",iLocal,&iLocal);
    return 0;
}
看来是我ida使用错误了,造成错误分析,不好意思了

[[it] 本帖最后由 vfdff 于 2008-11-1 11:39 编辑 [/it]]

地址.JPG (27.05 KB)


共享变量.JPG (49.85 KB)

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2008-11-01 01:49



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-241427-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083049 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved