【问题标题】:How to write to the console in fasm?如何在 fasm 中写入控制台?
【发布时间】:2010-03-29 18:56:43
【问题描述】:

我对组装非常陌生。我昨天才拿起它,我已经查看了很多示例,但仍然无法自己弄清楚如何写入控制台。当我似乎以自己的方式复制它时,我总是会出错。

【问题讨论】:

    标签: assembly fasm


    【解决方案1】:

    最简单的方法是使用 C 函数。在最简单的用法中,printf() 将字符串作为参数并将其写入标准输出。

    这段代码应该可以工作:

    format PE console
    entry start
    
    include 'win32a.inc'
    
    section '.text' code executable
    start:
            push hello
            call [printf]
            pop ecx
    
            push 0
            call [ExitProcess]
    
    section '.rdata' data readable
            hello db 'Hello world!', 10, 0
    
    section '.idata' data readable import
            library kernel32, 'kernel32.dll', \
                    msvcrt,   'msvcrt.dll'
            import kernel32, ExitProcess, 'ExitProcess'
            import msvcrt, printf, 'printf'
    

    【讨论】:

    • 这会立即关闭窗口:(
    • @jwzumwalt 最简单的解决方案是保持命令行程序打开。另一种方法是在程序结束时调用 getchar() 或类似方法,或者创建一个调用程序的批处理文件,然后使用 pause 命令。如果您需要更多信息,请告诉我。
    • 没有包含怎么办
    • 互联网上唯一真正有效的代码。
    【解决方案2】:

    使用WriteConsole

    include 'win32wxp.inc'
    
    .code
      start:
            invoke  AllocConsole
            invoke  WriteConsole,<invoke GetStdHandle,STD_OUTPUT_HANDLE>,tex,12,dummy,0
            invoke  Sleep,-1
    .end start
    
    .data
    tex     TCHAR   'Hello World!'
    dummy   rd      1  
    

    【讨论】:

    • 如果您希望能够使用管道重定向输出,您可以以类似的方式使用WriteFile
    • 没有包含你怎么做
    猜你喜欢
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2010-10-18
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    相关资源
    最近更新 更多