能力值:
( LV7,RANK:100 )
|
-
-
2 楼
整形也是这样放的,堆栈是往下生长的,越往下越大。存放的时候从地址小的地方开始,没什么不对啊。
楼主可以在数据窗口中跳到堆栈的位置,看看数据是怎么放的。
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
[QUOTE=fzhaoqiang;921166]例如
一个hello,sailor!的字符串
mov eax,hello
mov [ebp-10],eax
mov ecx,hello+4
mov .[ebp-c],ecx
mov ebx,hello+8
mov [ebp-8],ebx
为啥一个字符串赋值给局部变量的时候
是...[/QUOTE]
你该学学王爽的《汇编语言程序设计》了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
[QUOTE=fzhaoqiang;921166]例如
一个hello,sailor!的字符串
mov eax,hello
mov [ebp-10],eax
mov ecx,hello+4
mov .[ebp-c],ecx
mov ebx,hello+8
mov [ebp-8],ebx
为啥一个字符串赋值给局部变量的时候
是...[/QUOTE]
好像是局部变量都是在栈里边吧。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
对..以前就是发现了数组类型的总是 ebp-大的在前面这个规则
但是嫩是没注意堆栈,刚自己测试了一下确实是这样的.,.
非常低感谢...
同样感谢其他回答问题的朋友...
|
能力值:
( LV10,RANK:160 )
|
-
-
6 楼
1、堆栈是向前分配空间的,分配局部变量用到esp-n的形式,像你用汇编写程序,一个函数的开始就是:push
ebp ; mov ebp,esp ; sub esp,n这样的形式,这样就能确保用ebp-n的形式进行局部变量的寻址
2、对齐32位的取和储存值的速度是最快的,通常的取值或存值操作最好都是按照一个dword型来取(哪怕是
取一个字节的数据)。当然你可以用这样的形式来操作,mov al,byte ptr [ebp+n];mov byte ptr
[ebp+1],al
3、取值,然后存放,不管是byte,word,dword的都不影响。当操作的是一个dword时,取值到寄存器,
在内存单元的高字节会存放到寄存器的低字节位,然后存值时也是同样的方法,也就是说负负得正,因此存
和取不会影响数据的
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
我记错了么?ebp+n进行的是局部变量的寻址
|
能力值:
( LV15,RANK:670 )
|
-
-
8 楼
向下增长,是越用地址越小。
|
能力值:
( LV7,RANK:100 )
|
-
-
9 楼
是越用越小,但是OD的那个堆栈窗口里的地址是越往下越大,搞晕了
|
能力值:
( LV15,RANK:670 )
|
-
-
10 楼
越往下数值越大就对了,因为最上面是栈项呀。
|
能力值:
( LV10,RANK:160 )
|
-
-
11 楼
自己写个程序,用OD调试看看不就知道了吗~~~
|
能力值:
( LV12,RANK:270 )
|
-
-
12 楼
栈是由内存高址向内存地址生长的,而字符串的识别是由内存低址到内存高址的……应该就是这个意思吧~
|
能力值:
( LV12,RANK:270 )
|
-
-
13 楼
一般ebp+n是函数的参数,ebp-n是局部变量……
|
能力值:
( LV10,RANK:160 )
|
-
-
14 楼
哦,原来是我打错,‘-’在‘+’的附近~
|
|
|