首页
社区
课程
招聘
[旧帖] [求助]关于反汇编的语言问题 0.00雪花
发表于: 2010-11-27 13:42 1618

[旧帖] [求助]关于反汇编的语言问题 0.00雪花

2010-11-27 13:42
1618
比如      PUSH    DWORD   PTR [ESI+1C]  这样含有中括号的东西

是不是带中括号里的值都是内存地址,而那个内存地址里的数据才是操作数???
(可能会有后续的问题,希望高手不吝赐教,谢谢!)

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
ptr前的标识表示数据类型,ptr后的标识表示数据首地址
2010-11-27 14:06
0
雪    币: 38
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
是的
[  ]里的是内存单元的地址
地址处数据才是操作数
2010-11-27 14:07
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
不一定,带中括号里的值可以是内存地址,也可以是数值。这主要看对这个地址(数值)操作指令是什么类型的指令才能判断中括号的值是内存地址还是数值。如果指令是属于操作内存地址的,带中括号中的值就是内存地址,如果指令是操作指针的数值的,那带中括号的数值可能是指针地址,也可能是数值。如你上面的push指令操作带中括号的值时,中括号的值就只能是内存地址,不能是数值。如lea eax,[esi+1c]指令时,带中括号的数值可以是内存地址,也可以是数值。
2010-11-27 14:07
0
雪    币: 45
活跃值: (27)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
那对于是  lea    eax , [edx+10]
内存怎么知道中括号是数值还是地址呢?
2010-11-27 14:16
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼上人才!
2010-11-27 14:17
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=zevenfly;895679]那对于是  lea    eax , [edx+10]
内存怎么知道中括号是数值还是地址呢?[/QUOTE]

就是目标地址传送指令: 将一个近地址指针写入到指定的寄存器。格式:
LEA reg16,mem16
其中reg16必须是一个16位通用寄存器,mem16必须是一个存储器,执行这个指令后,就将mem16所指的16位偏移地址传送reg16中。
lea    eax , [edx+10]
就是eax=edx+10.
区别MOV传送指令:
    MOV传送的是地址所指的内容,而LEA只是地址。
2010-11-27 14:32
0
雪    币: 38
活跃值: (48)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
我明白版主说的意思了 ~~~
其实 主要就是这个 lea 指令作怪吧

我说 [ XXX ] 中的XXX一定是 内存虚拟线性地址 ~~ 也应该是 正确的

因为 就算是 lea 指令 ,lea eax,[esi + 1Ch]
我就把 esi+1Ch 看做地址。
lea 指令的使命就是 取内存单元的偏移地址
自然就计算 esi+1Ch 送给 eax
这里 不管 这个 XXX 是哪里的 、 有没有提交 。它 就是一个 虚拟地址
这个虚拟地址不一定 已经分配有物理内存,但这个虚拟线性地址 我肯定是可以使用的
2010-11-27 15:38
0
游客
登录 | 注册 方可回帖
返回
//