Сборка pe64 gui win64 WriteFile ничего не показывает - PullRequest
0 голосов
/ 10 ноября 2019

Это мой исходный код, который должен показывать «Привет, мир!»Сообщение но ничего не показывает!

FORMAT PE64 GUI
ENTRY start

SECTION '.text' CODE READABLE EXECUTABLE

start:
        mov     rcx, -11
        call    [GetStdHandle]

        mov     rcx, rax
        mov     rdx, msg
        mov     r8d, 13
        mov     r9, MSG_WRITTEN_BYTES
        sub     rsp, 40
        mov     QWORD [rsp+32], 0
        call    [WriteFile]
        add     rsp, 40

        xor     rcx, rcx
        call    [ExitProcess]


section '.data' data readable writeable

  msg: db 'Hello World!',0

SECTION '.idata' IMPORT DATA READABLE WRITABLE

        DD      0,0,0,RVA KERNEL32,RVA KERNEL32F          ; KERNEL32.DLL
        DD      0,0,0,0,0

        KERNEL32:      DB 'KERNEL32.DLL',0

        KERNEL32F:
                ExitProcess     DQ RVA _ExitProcess
                GetStdHandle    DQ RVA _GetStdHandle
                WriteFile       DQ RVA _WriteFile
                                DQ 0

        _ExitProcess:   DB 0,0,'ExitProcess',0
        _GetStdHandle:  DB 0,0,'GetStdHandle',0
        _WriteFile:     DB 0,0,'WriteFile',0

SECTION '.bss' READABLE WRITABLE

        MSG_WRITTEN_BYTES: RQ 1          

Все выглядит хорошо !! но я не знаю, почему ничего не показывает! у меня тоже нет ошибок, и я ничего не могу найти с отладкой!

1 Ответ

0 голосов
/ 10 ноября 2019

Вы не правильно вызываете WriteFile - вам все еще нужно выделить место в стеке для вызываемого абонента для сохранения регистров (см. MS документы ).

Проверкаэтот SO ответ для рабочего примера: Как правильно вызвать 64-битный Windows API в сборке

...