请教各位汇编高手,由于我们的开发工具比较老(客观,无法改变) ,在放置新开发的基于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
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)