能力值:
( LV2,RANK:10 )
|
-
-
2 楼
LEA 取地址
MOV 取值
~~~~~~~
|
能力值:
(RANK:10 )
|
-
-
3 楼
最初由 tcflying 发布 LEA 取地址 MOV 取值
~~~~~~~
但看雪的教程怎么这样写
14、问:在汇编语言中,“[]”的用法?如:
1、push dword ptr [024c1100]
2、cmp eax,[ebp+14]
3、cmp byte ptr [eax],46
4、lea eax,[edx-02]
5、mov ecx,[edx+08]
其中“[]”里的内容,什么时候表示的是值,什么时候表示的是地址,为什么?第4个是不是把“edx-02”的值作为地址送给eax???
另一个问题是:我发现在soft-ice中,在寄存器区(即最上面的那个区,标志位下面)的右下脚有一个类似:“ds:xxxxxxxx=xxxxxxxx”的字样,时隐时现,并不断变化,不知是干什么用的,请指教,不胜感激!!!!!!!!
答:
①右下角显示的那个是当前指令要操作的内存的地址及内容 。
lea指令表示取有效地址,第4个是把“edx-02”的值送给eax。
②
1,压栈024c1100值的双字
2,eax-ebp+14的有效值,不保留值,主要看标志位。
3,字节型eax-46,看标志位
4,把edx-02的有效值给eax
5,edx+8处值作为地址,此地址的值给ecx
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
虽然我仍是菜鸟,不过论坛上的DX都会回答,我尽点微薄之力吧.如有不对高手指正!!
4、lea eax,[edx-02] 这个没错的.
ds:xxxxxxxx(这边可以看成是数据段偏移地址)=xxxxxxxx(值)
亮的时候说明对这个地址,数据有变动.
|
能力值:
( LV9,RANK:330 )
|
-
-
5 楼
你自己,在od里调试一下(反复改了看各种形式的结果),就明白了。
这个只能意会不能言传,呵呵。
|
能力值:
(RANK:10 )
|
-
-
6 楼
一个比较特别的指令是lea, 意思是"装入有效地址"(Load Effective Address), 它的操作数就是地址,所以
lea eax,[edx-02]
就是把 edx 中的值减去2再送入eax, 而不是把由[edx-02]指明的内存地址上的值放到eax. 其结果是[eax]和[ebx-02]都表示同一个地址.
其实这句就相当于mov eax,edx-2
|
能力值:
(RANK:10 )
|
-
-
7 楼
综括号"[]"用来从括号间的内存地址处取值,没有括号就只是这个值,寄存器和内存地址也可以.
|
能力值:
( LV13,RANK:970 )
|
-
-
8 楼
好象N多人问Lea的问题,建议把这个写在FAQ里面,免得天天讨论
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
呵呵,说的很明白,我也一直不是很清楚!谢谢了!
最初由 great123 发布 一个比较特别的指令是lea, 意思是"装入有效地址"(Load Effective Address), 它的操作数就是地址,所以 lea eax,[edx-02] 就是把 edx 中的值减去2再送入eax, 而不是把由[edx-02]指明的内存地址上的值放到eax. 其结果是[eax]和[ebx-02]都表示同一个地址.
........
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
aogo站上有大量这种FAQ~~;)
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
学习了一遍
|
能力值:
(RANK:10 )
|
-
-
12 楼
谢谢大家帮助
|
能力值:
( LV9,RANK:250 )
|
-
-
13 楼
基本上
LEA=MOV OFFSET
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
原则上先用mov offset,因为无论从执行效率还是编码大小衡量,mov offset均优于lea,
但取局部变量地址只能用lea,
其实lea还有一个‘另类’的功能:
将两个寄存器相加,把和放入第三个寄存器
如 lea eax,[ebx+edx+1]
明显优于
mov eax,ebx
add eax,edx
add eax,1
|
|
|