首页
社区
课程
招聘
[己解决]repne scasb异常请教高手
发表于: 2009-1-8 11:23 7936

[己解决]repne scasb异常请教高手

2009-1-8 11:23
7936
请教各位汇编高手,由于我们的开发工具比较老(客观,无法改变) ,在放置新开发的基于Unicode的ActiveX控件(Delphi2009)时候报错指向68019210行, repne scasb;但是放置到VS2008等新开发工具设计界面均正常;放置以前D2007等开发的也正常(代码一致),即使没有任何代码也会报这个错;
请教高手:这个错误如何解决,现在只能基于修改这个dll文件代码了,原开发厂商已经停止开发了.
.text:680191B7 loc_680191B7:                           ; CODE XREF: sub_68019120+3Ej
.text:680191B7                                         ; sub_68019120+72j
.text:680191B7                 mov     ebx, [ebp+arg_4]
.text:680191BA                 test    ebx, ebx
.text:680191BC                 jz      loc_6801927B
.text:680191C2                 mov     eax, [ebx]
.text:680191C4                 push    0
.text:680191C6                 lea     ecx, [ebp+bstrString]
.text:680191C9                 push    0
.text:680191CB                 push    ecx
.text:680191CC                 push    0
.text:680191CE                 push    0FFFFFFFFh
.text:680191D0                 push    ebx
.text:680191D1                 call    dword ptr [eax+24h]
.text:680191D4                 test    eax, eax
.text:680191D6                 jnz     short loc_6801922A
.text:680191D8                 mov     eax, [ebp+bstrString]
.text:680191DB                 test    eax, eax
.text:680191DD                 jnz     short loc_680191E3
.text:680191DF                 xor     edx, edx
.text:680191E1                 jmp     short loc_68019209
.text:680191E3 ; ---------------------------------------------------------------------------
.text:680191E3
.text:680191E3 loc_680191E3:                           ; CODE XREF: sub_68019120+BDj
.text:680191E3                 push    eax             ; lpString
.text:680191E4                 call    ds:lstrlenW
.text:680191EA                 lea     esi, [eax+eax+2]
.text:680191EE                 mov     eax, esi
.text:680191F0                 add     eax, 3
.text:680191F3                 and     al, 0FCh
.text:680191F5                 call    __alloca_probe
.text:680191FA                 mov     edx, [ebp+bstrString]
.text:680191FD                 mov     eax, esp
.text:680191FF                 push    esi             ; int
.text:68019200                 push    edx             ; unsigned __int16 *
.text:68019201                 push    eax             ; char *
.text:68019202                 call    ?AfxW2AHelper@@YGPADPADPBGH@Z ; AfxW2AHelper(char *,ushort const *,int)
.text:68019207                 mov     edx, eax
.text:68019209
.text:68019209 loc_68019209:                           ; CODE XREF: sub_68019120+C1j
.text:68019209                 mov     edi, edx
.text:6801920B                 or      ecx, 0FFFFFFFFh
.text:6801920E                 xor     eax, eax
[B][COLOR="Red"].text:68019210                 repne scasb;报错指示位置[/COLOR][/B]
.text:68019212                 not     ecx
.text:68019214                 dec     ecx
.text:68019215                 push    ecx
.text:68019216                 push    edx
.text:68019217                 lea     ecx, [ebp+var_20]
.text:6801921A                 call    ds:?append@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAAV12@PBDI@Z ; std::basic_string<char,std::char_traits<char>,std::allocator<char>>::append(char const *,uint)
.text:68019220                 mov     eax, [ebp+bstrString]
.text:68019223                 push    eax             ; bstrString
.text:68019224                 call    ds:SysFreeString
.text:6801922A

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 214
活跃值: (24)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
.text:680191DF                 xor     edx, edx
.text:680191E1                 jmp     short loc_68019209

当bstrString为空时,导致崩溃。解决办法,应该直接JMP到68019220 或者其他返回地方
2009-1-8 13:19
0
雪    币: 30
活跃值: (735)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
right,
不过要注意EAX为0, 可能出错,自己分析找准位置
改 text:680191E1 EB 26为 EB offset
2009-1-8 15:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
特别感谢wowelf和uvbs,祝你们新年快乐,合家幸福!
最后改成EB 3D即跳转到6801922,完美解决;
再次感谢!
2009-1-8 18:19
0
游客
登录 | 注册 方可回帖
返回
//