标题: 请帮忙看看以下代码哪里出了问题:
性别:男-离线 武骧金星

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 前将军
功绩 29
帖子 1763
编号 56399
注册 2005-12-31
来自 上海


发表于 2010-3-6 06:07 资料 个人空间 短消息 看全部作者 QQ
请帮忙看看以下代码哪里出了问题:

004CE7B6    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
004CE7B9    8A51 01         MOV DL,BYTE PTR DS:[ECX+1]
004CE7BC    8BCA            MOV ECX,EDX
004CE7BE    6BC9 24         IMUL ECX,ECX,24
004CE7C1    81C1 502C4B00   ADD ECX,Ekd5.004B2C50
004CE7C7    E8 A40EF9FF     CALL Ekd5.0045F670

这段代码在CALL 45F670时会出现以下的问题:(以下是单步步过的结果)

0045F670  /$  55            PUSH EBP
0045F671  |.  8BEC          MOV EBP,ESP
0045F673  |.  51            PUSH ECX
0045F674  |.  894D FC       MOV DWORD PTR SS:[EBP-4],ECX
0045F677  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0045F67A  |.  8B00          MOV EAX,DWORD PTR DS:[EAX] //访问违规: 读取[0A94AE14]
0045F67C  |.  8BE5          MOV ESP,EBP
0045F67E  |.  5D            POP EBP
0045F67F  \.  C3            RETN

请问这可能是由于什么原因?谢谢。

[ 本帖最后由 武骧金星 于 2010-3-6 06:22 编辑 ]


顶部
性别:男-离线 武骧金星

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 前将军
功绩 29
帖子 1763
编号 56399
注册 2005-12-31
来自 上海


发表于 2010-3-6 12:34 资料 个人空间 短消息 看全部作者 QQ
……真奇怪,这时ECX的值是004927F0,应该是没问题的……

可是接下去几步后ECX就变成那个违规调用的内存位置了……

[ 本帖最后由 武骧金星 于 2010-3-6 13:02 编辑 ]


顶部
性别:男-离线 武骧金星

Rank: 7Rank: 7Rank: 7Rank: 7
组别 校尉
级别 前将军
功绩 29
帖子 1763
编号 56399
注册 2005-12-31
来自 上海


发表于 2010-3-6 13:12 资料 个人空间 短消息 看全部作者 QQ
经过仔细研究发现:原来代码应该改成这个样子:

004CE7B6    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
004CE7B9    8A51 01         MOV DL,BYTE PTR DS:[ECX+1]
004CE7BC    8BCA            MOV ECX,EDX
在这里插一条:                  AND ECX, 0FF
004CE7BE    6BC9 24         IMUL ECX,ECX,24
004CE7C1    81C1 502C4B00   ADD ECX,Ekd5.004B2C50

这样就行了……

不过,能不能在技术上解释一下这里出问题的原因呢?谢谢。
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-8-23 20:12
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.008837 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP