在回答我关于Windows API的问题时,我已经成功地使用它。我的问题是关于这段代码:
push STD_OUTPUT_HANDLE
call GetStdHandle
push NULL
push offset other
push mlen
push offset msg
push eax
call WriteConsole
push 0
call ExitProcess
此代码应打印msg
的值。为什么需要这样做:
A)
push STD_OUTPUT_HANDLE
call GetStdHandle
push NULL
和
b)中
push offset other
push mlen
push offset msg
push eax
我只是想知道获得StdHandle
和推动抵消的需要是什么。
提前致谢,
Progrmr
答案 0 :(得分:2)
查看definition of WriteConsole。 NULL是函数的最后一个参数,即lpReserved参数。参数按从右到左的顺序推送。第一个函数参数是控制台句柄,你从GetStdHandle得到的那个,你通过推送eax传递。
正确评论汇编代码:
push STD_OUTPUT_HANDLE ; GetStdHandle nStdHandle argument
call GetStdHandle ; eax = Console handle
push NULL ; lpReserved = null
push offset other ; lpNumberOfCharsWritten = pointer to "other"
push mlen ; nNumberOfCharsToWrite = length of "msg"
push offset msg ; lpBuffer = pointer to "msg"
push eax ; hConsoleOutput = console handle from GetStdHandle
call WriteConsole ; Write string
push 0 ; exit code = 0
call ExitProcess ; terminate program