能力值:
( LV2,RANK:10 )
|
-
-
2 楼
假设,ESP寄存器的值0012FF10,里面存的内容是0000FFFF,而地址0012FF14的内容是EEEE0000。
有了上面的这段假设,那么mov ecx,[esp +4]的值就好理解了。
首先esp=0012FF10,esp+4=0012FF14,[esp+4]的意思是去这个地址里的内容,所以[esp+4]=EEEE0000
不知道你看明白没有。
希望楼主先补下汇编语言的基础。
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
[QUOTE=地精锁匠;1080890]假设,ESP寄存器的值0012FF10,里面存的内容是0000FFFF,而地址0012FF14的内容是EEEE0000。
有了上面的这段假设,那么mov ecx,[esp +4]的值就好理解了。
首先esp=0012FF10,esp+4=0012FF14,[esp+4]的意思是去这个地址里的内容...[/QUOTE]
很久没学给忘记了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个应该就是汇编的变址寻址吧!
都忘完了! 看来要好好复习啊!
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
把内存地址esp+4中的数据放到ecx
esp+4为当前堆栈指针+4
[]表示内存地址里的数据
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
相当于才语言中的
ecx = esi[4]
ecx寄存器可理解为变量,esi可理解为指针,整个合起来可以理解为
将esi值+4所指向的内存中的值赋给(mov)寄存器ecx
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
mov是移动 后面从右往左 就是把内存地址门牌号为esp+4 里面的值移交给ecx
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
这个我也不理解
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
按照IAD来讲,在debug编译模式下,传入函数参数使用基于ESP的正向地址存储,函数局部变量使用ESP的负向地址存储,ESP+4有可能是传入函数的第一个参数所在的地址;ESP即是堆栈的基地址指针,楼上几位也讲到;mov ecx,[ESP+4]就是把ESP+4地址处的变量内容拷贝到ecx寄存器
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
是C++的类函数吧,[ESP+4]是this指针,放到ecx中吧?
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
如果传递的是对像的地址,应该就是this,
|
能力值:
( LV3,RANK:20 )
|
-
-
12 楼
你要学习下 识别函数栈帧 方面的知识.
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
对于esp+4
先要知道:有个堆栈的东东,
假设就是那种装书的盒子,只能一本一本的放进去。但是有时我们拿一个盒子来,其实是想过里面要放什么的,所以当一本一本放好后,我们最起马,一段时间内是知道从最底下的那一本到最上面的一本是那些书,最上面那本你肯定能看到,那就是esp指向的。
下一步你要知道堆栈的方向和内存方向相反,
栈顶的地址小,也就是说:esp-4是放书进去
那esp+4很显然就是拿书出来,对吧
再下一步,你可能就会却的不是刚才说过堆栈只能一本一本的放,只能从上面一本一本的拿出来吗?
怎么现在又可以一下拿到下面的书呢?
这就要转换思想了,esp是永远指向栈顶的地址。在你给的语句中,esp没有变化,所以还是该指那指那,只是作为一个参照。
但是堆栈也是内存地址,所以可以通过一般的读内地址方式进行读取,所以这时的esp+4其实就是一个普通的地址,只是刚好指向堆栈区而已,一般我们都说不要随便破坏堆栈中的数据,不然会引发不可知的异常。但是你只是读取,相当于copy,没多大影响。
|
能力值:
( LV12,RANK:250 )
|
-
-
14 楼
上边的回复都没有说到点子上。
如果一个函数比较复杂,编译后会有以下操作:
push ebp
mov ebp, esp
.........
mov esp, ebp
pop ebp
retn
此时函数会用ebp作为传递参数的指针。
[ebp+4]为函数的返回后执行的下一行的地址
[ebp+8]为第一个参数。
如果是个简单函数,则不执行以上push ebp操作,如此:
[esp]为函数的返回后执行的下一行的地址
[esp+4]为函数的第一个参数地址。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
不知道你问的是什么意思,若是指在进入函数后,没有做任何其它的PUSH和POP之类的操作,此时esp+4中存放的数据是上层的第一个参数,以4为单位,依次递增,若是做了其它操作,就这能这样计算了
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
嗯,说的搜有理。受教了。
|
|
|