首页
社区
课程
招聘
[求助]汇编代码有点疑问
发表于: 2009-9-21 11:29 4110

[求助]汇编代码有点疑问

2009-9-21 11:29
4110
lea     edx, dword ptr [406349]          ;  取首地址到edx
push    edx                                         ; /String => "fish"
call    <jmp.&kernel32.lstrlenA>         ; \lstrlenA
mov     ebp, eax                                 ;  ebp保存用户名长度


lea     edx, dword ptr [406349]          ;  取首地址到edx
;执行完这句话  edx=00406349  ASCII="fish"
但是,执行完mov     ebp, eax
eax=4  edx咋变成了edx=0040634A   ASCII="ish"
为何edx从00409349变成了0040634A?
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
参考汇编里面的寻址方式。
2009-9-21 14:16
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
lstrlenA函数用到了2个寄存器做计数:1个是EAX,指向字符串的结束符的下一个字符的位置;另外一个就是EDX,指向字符串的第二个字符。然后EAX = EAX-EDX并将EAX的值返回,也就是返回整个字符串的长度。

因为lstrlenA函数内部用到了EDX,且EDX始终指向字符串的第二个字符,所以就出现了LZ所述的情况
2009-9-21 15:14
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
谢谢了 明白了
2009-9-21 15:51
0
游客
登录 | 注册 方可回帖
返回
//