首页
社区
课程
招聘
lea edx,dword ptr ds:[eax+2]指令怎么看内存
发表于: 2005-8-16 14:36 9747

lea edx,dword ptr ds:[eax+2]指令怎么看内存

2005-8-16 14:36
9747
lea edx,dword ptr ds:[eax+2], 执行后 edx=23。
这个时候在olldbg中如何查看edx所指向内存的数据???

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
edx==23,23只是一个数值,不是什么内存数据,所以无法查看。
2005-8-16 14:58
0
雪    币: 47147
活跃值: (20470)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
小虾说的对,edx只是个数据,这时不是存放地址指针。
编译器优化时,比较喜欢用LEA指令来代替ADD指令。
lea edx,dword ptr ds:[eax+2] 就是 edx=eax+2运算
2005-8-16 17:20
0
雪    币: 109
活跃值: (498)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
4
可以理解成 mov edx,[eax+2]
么》
2005-8-16 21:26
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
不可以,这样做将会出现非法读取内存异常。
2005-8-16 21:34
0
雪    币: 47147
活跃值: (20470)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
6
最初由 cater 发布
可以理解成 mov edx,[eax+2]
么》


等效下2句:
add eax,2
mov edx,eax

例如算式c=a+b+2,编译器优化后的结果就是:
LEA c,[a+b+2]
(其中a,b,c是寄存器)
LEA指令允许用户在一个时钟内完成c=a+b+2计算
2005-8-17 08:09
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
7
mov edx,[eax+2]这个指令是读取[eax+2]指向的内存数据到edx(若eax不是地址,而是数据将会出现读取内存异常),lea edx,[eax+2]是取eax+2的有效地址或数据到edx中,mov和lea是不同的指令。
2005-8-17 08:21
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
可能我没有说清楚,我也知道lea是取有效地址的指令。
我想知道的是,得到这个有效地址后,我如何通过olldbg登调试工具去看
该有效地址的数据?
2005-8-17 08:46
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
9
不是说不可以吗,“edx==23”,“23”不是有效的指针,所以无法用Ollydbg等调试工具去看这个指针的内存数据。
2005-8-17 08:52
0
雪    币: 109
活跃值: (498)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
10
呵呵 ~我理解的是

mov edx,eax+2

写错了~
呵呵
看来我原本的意思还是正确的~
嘿嘿~
2005-8-17 12:51
0
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
随便找个程序调试的时候多注意这种指令,观察指令前寄存器的值和计算后的值,次数多就记住了。
2005-8-18 01:18
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
llp
12
最初由 kanxue 发布


等效下2句:
add eax,2
mov edx,eax
........

学习了,看来lea的用法跟平时学习的有很大的不同啊
2005-8-18 01:44
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 小虾 发布
不是说不可以吗,“edx==23”,“23”不是有效的指针,所以无法用Ollydbg等调试工具去看这个指针的内存数据。

--------------------------
郁闷啊。。我又不是关系 edx的值,
我是关系edx 指向内存的值。。
我的问题是 怎么计算这个内存地址??然后在olldbg查看
2005-8-18 10:06
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
14
最初由 lwglucky 发布

--------------------------
郁闷啊。。我又不是关系 edx的值,
我是关系edx 指向内存的值。。
我的问题是 怎么计算这个内存地址??然后在olldbg查看

经过lea edx,[eax+2]这条语句时,eax+2的值传给了edx,所以只要在OllyDBG的命令输入窗口中输入"d edx"即可在OllyDBG内存窗口中查看edx指向的内存的值了(不过在查看前要保证[eax+2]传给edx的是一个指针才能查看内存,若edx得出的值不是指针是无法查看的)。
2005-8-18 11:07
0
雪    币: 47147
活跃值: (20470)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
15
最初由 lwglucky 发布

郁闷啊。。我又不是关系 edx的值,
我是关系edx 指向内存的值。。
我的问题是 怎么计算这个内存地址??然后在olldbg查看


是蛮郁闷的,小虾己说的很清楚了。
就假设EDX是存放某一指针402000,如要查看其所指的数据,在OD的命令行,下命令:d 402000
2005-8-18 11:10
0
雪    币: 141
活跃值: (162)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
这个贴不错,学习了!!!
2005-8-18 13:02
0
雪    币: 207
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
呵呵,用LEA的命令就是不改变EAX的值,而改变EDX的值,
2005-8-18 13:33
0
游客
登录 | 注册 方可回帖
返回
//