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。なぜ行う必要があるのですか?

a)

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から取得したもので、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 に答える