对于同一个局部变量为何要在循环内使用lea而不在循环外?
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
local @szBuffer[128]:byte
local @szBuffer1[128]:byte
local @szTextBuff[2048]:byte
local @dwCount
...
lea esi,@szBuffer
.while @dwCount
lodsd
lea ecx,@szBuffer1 //就是这一行,为什么不放到循环外面去?
invoke SendDlgItemMessage,hWnd,IDC_LISTBOX2,LB_GETTEXT,eax,ecx
invoke lstrcat,addr @szTextBuff,addr szReturn
invoke lstrcat,addr @szTextBuff,addr @szBuffer1
dec @dwCount
.endw
...
_ProcDlgMain endp
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
并不太清楚题主的平台,语言以及编译器等情况,我就按照自己理解的一般情况来说。
一般对于x86 calling convention来说,特别的,如果这是c语言编译后的结果,使用的cdecl calling convention,那么ECX是由调用者保存的,换句话说由于被调用的函数并不负责保存ECX, 题主例子中的ECX值可能在后续的函数调用后被覆盖。
所以,像题主的例子里,每次去获取那个buffer的地址并写入ECX是外层调用者保存ECX的手段。