我用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吗
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课