win32 课程中,源代码的不理解。请教
.data?hInstance dd ?
hWinMain dd ?
_WinMain proc
local @stWndClass:WNDCLASSEX
local @stMsg:MSG
1 invoke GetModuleHandle,NULL
2 mov hInstance,eax
3 invoke RtlZeroMemory,addr @stWndClass,sizeof @stWndClass
4
5 invoke LoadCursor,0,IDC_ARROW
6 mov @stWndClass.hCursor,eax
7 push hInstance
8 pop @stWndClass.hInstance
9 mov @stWndClass.cbSize,sizeof WNDCLASSEX
10 mov @stWndClass.style,CS_HREDRAW or CS_VREDRAW
11 mov @stWndClass.lpfnWndProc,offset _ProcWinMain
12 mov @stWndClass.hbrBackground,COLOR_WINDOW + 1
13 mov @stWndClass.lpszClassName,offset szClassName
14 invoke RegisterClassEx,addr @stWndClass
第一个问题第二行中的mov hInstance,eax,这里面的hInstance 是不是全局变量中的那个?
第二个问题第三行中的RtlZeroMemory,后面的两个参数。为什么指的是 lpCursorName和 hInstance难道不应该是所有的所有的成员吗? (lpCursorName和 hInstance)是通过IDA反汇编看出来的
第三个问题第七行中的PUSHhInstance 跟第八行pop @stWndClass.hInstance 中的hInsthance 中的是同一个吗?是不是都是全局变量的那个?
请解答,谢谢,自学不容易,老师讲的又过于快
自己给自己顶一下,来个大牛帮助下啊 第一个问题 =是的,将返回值保存到全局变量
第二个问题 =RtlZeroMemory其实就是将一段内存置0的函数,参数1为开始地址,2为长度。一般的结构在内存中也就是一段连续的内存,sizeof取了这个结构的长度(这个长度包含了你说的所有成员),addr取了这个结构的开始地址
第三个问题 = PUSHhInstance就是你第1个问题那个,@stWndClass.hInstance 中的hInsthance是这个结构@stWndClass的一个成员
pushhInstance ;压栈全局变量hInstance
pop @stWndClass.hInstance ; 出栈 (就是将上面那个全局变量赋值给这个结构的成员hInstance)
你可以这样理解
mov eax,hInstance
mov @stWndClass.hInstance,eax
我觉得还是看书比较好,可以前后翻看理解代码 嗯,非常感谢您的回复。我看了后面的小甲鱼的视频,就明白了。还是谢谢你。
页:
[1]