能力值:
(RANK:410 )
|
-
-
2 楼
edx==23,23只是一个数值,不是什么内存数据,所以无法查看。
|
能力值:
(RANK:350 )
|
-
-
3 楼
小虾说的对,edx只是个数据,这时不是存放地址指针。
编译器优化时,比较喜欢用LEA指令来代替ADD指令。
lea edx,dword ptr ds:[eax+2] 就是 edx=eax+2运算
|
能力值:
( LV12,RANK:220 )
|
-
-
4 楼
可以理解成 mov edx,[eax+2]
么》
|
能力值:
(RANK:410 )
|
-
-
5 楼
不可以,这样做将会出现非法读取内存异常。
|
能力值:
(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计算
|
能力值:
(RANK:410 )
|
-
-
7 楼
mov edx,[eax+2]这个指令是读取[eax+2]指向的内存数据到edx(若eax不是地址,而是数据将会出现读取内存异常),lea edx,[eax+2]是取eax+2的有效地址或数据到edx中,mov和lea是不同的指令。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
可能我没有说清楚,我也知道lea是取有效地址的指令。
我想知道的是,得到这个有效地址后,我如何通过olldbg登调试工具去看
该有效地址的数据?
|
能力值:
(RANK:410 )
|
-
-
9 楼
不是说不可以吗,“edx==23”,“23”不是有效的指针,所以无法用Ollydbg等调试工具去看这个指针的内存数据。
|
能力值:
( LV12,RANK:220 )
|
-
-
10 楼
呵呵 ~我理解的是
mov edx,eax+2
写错了~
呵呵
看来我原本的意思还是正确的~
嘿嘿~
|
能力值:
( LV4,RANK:50 )
|
-
-
11 楼
随便找个程序调试的时候多注意这种指令,观察指令前寄存器的值和计算后的值,次数多就记住了。
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
最初由 kanxue 发布
等效下2句: add eax,2 mov edx,eax ........
学习了,看来lea的用法跟平时学习的有很大的不同啊
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
最初由 小虾 发布 不是说不可以吗,“edx==23”,“23”不是有效的指针,所以无法用Ollydbg等调试工具去看这个指针的内存数据。
--------------------------
郁闷啊。。我又不是关系 edx的值,
我是关系edx 指向内存的值。。
我的问题是 怎么计算这个内存地址??然后在olldbg查看
|
能力值:
(RANK:410 )
|
-
-
14 楼
最初由 lwglucky 发布
-------------------------- 郁闷啊。。我又不是关系 edx的值, 我是关系edx 指向内存的值。。 我的问题是 怎么计算这个内存地址??然后在olldbg查看
经过lea edx,[eax+2]这条语句时,eax+2的值传给了edx,所以只要在OllyDBG的命令输入窗口中输入"d edx"即可在OllyDBG内存窗口中查看edx指向的内存的值了(不过在查看前要保证[eax+2]传给edx的是一个指针才能查看内存,若edx得出的值不是指针是无法查看的)。
|
能力值:
(RANK:350 )
|
-
-
15 楼
最初由 lwglucky 发布
郁闷啊。。我又不是关系 edx的值, 我是关系edx 指向内存的值。。 我的问题是 怎么计算这个内存地址??然后在olldbg查看
是蛮郁闷的,小虾己说的很清楚了。
就假设EDX是存放某一指针402000,如要查看其所指的数据,在OD的命令行,下命令:d 402000
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
这个贴不错,学习了!!!
|
能力值:
( LV3,RANK:20 )
|
-
-
17 楼
呵呵,用LEA的命令就是不改变EAX的值,而改变EDX的值,
|
|
|