我用MASM32包,写了个函数如下:
.model flat, stdcall
。。。。。。。。。。。
_DisplayDataHex proc
pushad
mov esi,offset szClearBuf
mov edi,dwClearBufLen
invoke RtlZeroMemory,offset szBufHex,1024
.while edi != 0
invoke wsprintf,offset szTest,offset szFmtTs,byte ptr [esi]
invoke lstrcat,offset szBufHex,offset szSpace
invoke lstrcat,offset szBufHex,offset szTest
add esi,1
dec edi
.endw
invoke SendMessage,hWinInfo,EM_SETSEL,-1,-1
invoke SendMessage,hWinInfo,EM_REPLACESEL,FALSE,offset szBufHex
invoke SendMessage,hWinInfo,EM_SETSEL,-1,-1
invoke SendMessage,hWinInfo,EM_REPLACESEL,FALSE,offset szDA
popad
ret
_DisplayDataHex endp
用OD反编译后,发现进入函数时,ESP为0012F968,执行到RET的时候,ESP为0012F8F6,函数未能自动平衡,应该是wsprintf,lstrcat这2个函数出了问题,这是编译器的BUG吗
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!