有人知道WIN32 API参数传递的详细过程和步骤吗?
各位高手,有人知道WIN32 API参数传递的详细过程和步骤吗?我遇到个问题,一直想不明白,请教!
看下面例子(不完整,只有关键部分)
.data
stGlt SYSTEMTIME <?>
szTimeout db 128 dup (?)
szFormat db '%x:%x',0
.......
invoke GetLocalTime,addr stGlt
invoke wsprintf,addr szTimeOut,addr szFormat,stGlt.wHour,stGlt.wMinute
invoke MessageBox,NULL,addr szTimeOut,NULL,MB_OK
这个程序是想显示时间,输出的格式用了十六进制输出。
假如现在时间是17:01,则显示结果为:11:10000(这就是让我纳闷的地方),为什么会多出0000这个数值。
我把程序进行了编译成exe后,进行反编译,显示这样:
0040100C |. 68 04304000 push 00403004 ; /pSecurity = test.00403004
00401011 |? E8 42000000 call <jmp.&kernel32.GetLocalTime>
00401016 |? 6A 00 push 0
00401018 |. 66:FF35 0E304>push word ptr [40300E] ; /FailIfExists = FALSE
0040101F |. 6A 00 push 0 ; |ExistingFileName = NULL
00401021 |? 66:FF35 0C304>push word ptr [40300C]
00401028 |? 68 46204000 push 00402046 ; ASCII "%x:%x"
0040102D ? 68 2C304000 push 0040302C
00401032 ? E8 2D000000 call <jmp.&user32.wsprintfA>
00401037 ? 83C4 10 add esp, 10
0040103A ? 6A 00 push 0
0040103C . 6A 00 push 0
0040103E ? 68 2C304000 push 0040302C
00401043 ? 6A 00 push 0
00401045 ? E8 20000000 call <jmp.&user32.MessageBoxA>
从反编译看,在push stGlt.wHour和push stGlt.wMinute时,因为stGlt.wHour和stGlt.wMinute是word类型,所以push的时候,又自动加了push 0,但是不知道为什么在pop的时候怎么操作的,给pop stGlt.wHour值是对的,但是pop stGlt.wMinute却多出了0000。
麻烦高手解答,谢谢。顺便,谁能说一下API关于参数使用时,push和pop的详细过程更好。