- 论坛徽章:
- 0
|
局部的变量,可以认为是编译时计算好的,但是运行时才用,实际上你可以用vc的debug功能看一眼就明白了,就是个
esp - n(从此之后,这个N按理说是你需要的变量空间,但是也不一定,依赖与编译器实现,反正就是从栈上留一块地,等引用那个变量的时候就用ebp + xxx)
void test()
{
00401000 push ebp
00401001 mov ebp,esp
00401003 sub esp,0Ch //这里是分配栈空间,所谓的编译时计算就是这个是确定的
int x = 8;
00401006 mov dword ptr [x],8 //这里其实是根据那个ebp地址 + 多少(依赖于你的前面那个变量大小,这个x可能地址就是ebp + 0,不过这些都根据编译器有关,所以不是那么确定的),但是汇编器可能能直接根据符号得倒地址,所以这里直接显示 x变量名了。
int y = 9;
0040100D mov dword ptr [y],9
int z = 10;
00401014 mov dword ptr [z],0Ah
}
0040101B mov esp,ebp
0040101D pop ebp
0040101E ret
[ 本帖最后由 Solidus 于 2007-10-12 01:27 编辑 ] |
|