局部变量和全局变量

走在路上的人吧 2011-12-17 08:48:08

这是我反汇编的一个小程序
#include <iostream>
using namespace std;

int x = 5; //////全局变量对应的汇编代码是在哪?

int f()
{
00101A80 push ebp
00101A81 mov ebp,esp
00101A83 sub esp,0CCh
00101A89 push ebx
00101A8A push esi
00101A8B push edi
00101A8C lea edi,[ebp-0CCh]
00101A92 mov ecx,33h
00101A97 mov eax,0CCCCCCCCh
00101A9C rep stos dword ptr es:[edi]
int x = 4;
00101A9E mov dword ptr [x],4
{
extern int x;
return x;
00101AA5 mov eax,dword ptr [x (107000h)]
}
}
00101AAA pop edi
00101AAB pop esi
00101AAC pop ebx
00101AAD mov esp,ebp
00101AAF pop ebp
00101AB0 ret


就是局部变量和全局变量存在不同的地方在这些汇编代码中是如何体现出来的,大牛们帮忙解答下
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pu_xx 2011-12-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 quan958201599 的回复:]
引用 1 楼 keiy 的回复:
00101A9E mov dword ptr [x],4 //这个是局部的x

00101AA5 mov eax,dword ptr [x (107000h)] //这个是全局的x
不知你用的什么编译器,感觉00101A9E生成的有些不对
局部的x应该在栈上的,一般应该是
dword ptr [ebp-xx],4


我用的是vs2010
00……
[/Quote]
00101AA5 mov eax,dword ptr [x (107000h)] 这一句对应return x;
c语言一般用eax来保存函数的返回值

反汇编看到的是程序代码段的内容,全局变量和静态变量是保存在数据段的
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 keiy 的回复:]
00101A9E mov dword ptr [x],4 //这个是局部的x

00101AA5 mov eax,dword ptr [x (107000h)] //这个是全局的x
不知你用的什么编译器,感觉00101A9E生成的有些不对
局部的x应该在栈上的,一般应该是
dword ptr [ebp-xx],4
[/Quote]

我用的是vs2010
00101AA5 mov eax,dword ptr [x (107000h)] //这个是全局的x
为什么全局变量保存在了ax寄存器呢,如果声明很多全局变量那怎么办
iamnobody 2011-12-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 keiy 的回复:]
00101A9E mov dword ptr [x],4 //这个是局部的x

00101AA5 mov eax,dword ptr [x (107000h)] //这个是全局的x
不知你用的什么编译器,感觉00101A9E生成的有些不对
局部的x应该在栈上的,一般应该是
dword ptr [ebp-xx],4
[/Quote]

这里的x应该是一个方便阅读的汇编宏。我的vs2010有时候也这样写。

要想知道 全局变量在哪里?跟汇编一样啊。。。

int* p = &x;
加多这一句,运行到这里,然后在反汇编中,上面那里输入这个p的值,跳转到那里就可以看到他的汇编定义了。
你这里的仅仅是main函数里面的内容
whc262644839whc 2011-12-17
  • 打赏
  • 举报
回复
帮顶下,实在有心无力!!
柯本 2011-12-17
  • 打赏
  • 举报
回复
00101A9E mov dword ptr [x],4 //这个是局部的x

00101AA5 mov eax,dword ptr [x (107000h)] //这个是全局的x
不知你用的什么编译器,感觉00101A9E生成的有些不对
局部的x应该在栈上的,一般应该是
dword ptr [ebp-xx],4

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧