将参数打印到控制台

时间:2016-05-26 19:19:03

标签: winapi x86 nasm intel

我正在尝试通过函数打印作为参数接收的字符。

我的功能声明如下:

STD_OUTPUT_HANDLE   equ -11
NULL                equ 0

global _print
extern _ExitProcess@4, _GetStdHandle@4, _WriteConsoleA@20

section .data
msg                 db 'a', 13, 10, 0
msg.len             equ $ - msg

 section .bss
 dummy               resd 1

 section .text
 _print:
 ;Prologue
    push    ebp
    mov     ebp, esp

    mov     edx, [ebp + 4]

    push    STD_OUTPUT_HANDLE
    call    _GetStdHandle@4

    push    NULL
    push    dummy
    push    1
    push    edx
    push    eax
    call    _WriteConsoleA@20 

;Epilogue
    mov     esp, ebp
    pop     ebp

    push    NULL
    call    _ExitProcess@4

我的调用函数声明如下:

global _main
extern _print

section .data
msg                 db 'c', 13, 10, 0
msg.len             equ $ - msg

section .text
_main:
;Prologue
    push    ebp
    mov     ebp, esp

    push    msg
    call    _print

;Epilogue
    mov esp, ebp
    pop ebp

我希望在我的控制台中输出'c'作为输出,但这不起作用。当我将变量msg(定义为'a'的那个)传递给WriteConsole时,打印消息的方法有效。所以我猜测问题在于传递参数或从堆栈中读取它。

我正在使用Nasm编译,gcc链接&在Windows平台(32位)上使用intel语法进行编译。

我使用这些命令编译和链接

nasm -fwin32 tiny.asm
nasm -fwin32 tiny_print_char.asm

gcc tiny_print_char.obj tiny.obj -m32 --enable-stdcall-fixup -nostdlib        c:\windows\system32\kernel32.dll -lkernel32

任何人都可以帮助我吗?

0 个答案:

没有答案