首页
社区
课程
招聘
天书夜读中的几句反汇编指令转不过弯来
发表于: 2010-1-21 15:26 3676

天书夜读中的几句反汇编指令转不过弯来

2010-1-21 15:26
3676
该书23页有段这样的C语言结构体反汇编代码及注释

给结构体中的某元素赋值
strs[I].a=0

反汇编代码
第一句 mov eax,dword ptr [i]           ;
第二句 imul eax,eax,0ch               ;把i*0ch放入eax,0ch是系统计算的结构体大小
第三句 mov ecx,dword ptr [strs]       ;把strs的地址放入ecx
第四句 mov dword ptr [ecx+eax],0   ;得到strs[i]的地址并赋0

问?
在我的理解中 mov eax,[] 是将某内存中的值而不是地址放入寄存器,第三句能取出地址??
取地址不是应该有 lea 吗?

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
str是数组名,本身就是一个指针,其值就是数组的首地址
2010-1-21 15:42
0
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这是汇编又不是C啊
2010-1-21 16:10
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我是刚刚学习的。还看不懂楼主的问题。解答不了。

楼主可以看看视频讲解。都是大学的讲解的。会有帮助的。
2010-1-21 16:12
0
雪    币: 666
活跃值: (186)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
5
这段代码好像叫做“变址寻址”吧。
LEA 相当于 c 中的 a = &b 。 mov 相当于 c 中的 a = (void*) b。
strs的定义用c描述是
struct
{
void* p;
int a;
} strs;
2010-1-21 17:02
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼主可能理解错误了!!
mov ecx,dword ptr [strs]
从表面上看是直接寻址方式!我不懂C...具体是怎样就要看strs是什么形式了!
如果strs单单是一个地址,那么LZ就是对的!
像2楼说的strs是给指针呢?
这样LZ明白了吧?
2010-1-21 21:33
0
雪    币: 49
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
作者简写了,结帐
2010-1-22 12:11
0
游客
登录 | 注册 方可回帖
返回
//