0

在回答我关于 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。为什么需要这样做:

一个)

push STD_OUTPUT_HANDLE
    call GetStdHandle
    push NULL

和:

b)

push offset other
    push mlen
    push offset msg
    push eax

我只是想知道获得StdHandle和推动偏移量的需要是什么。

提前致谢,

程序

4

1 回答 1

2

查看WriteConsole 的定义。NULL 是函数的最后一个参数,即 lpReserved 参数。参数按从右到左的顺序推送。第一个函数参数是控制台句柄,它是您从 GetStdHandle 获得的,然后通过 push 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
于 2012-05-19T12:04:16.423 回答