【问题标题】:writing to a file in nasm using system calls使用系统调用在 nasm 中写入文件
【发布时间】:2010-12-24 12:50:45
【问题描述】:

作为作业的一部分,我应该使用系统调用写入文件。一切正常,除非我尝试在 gedit (Linux) 中打开文件。它说它无法识别字符编码。记事本(在 Windows 上)可以正常打开文件。

为什么这在 Linux 上不起作用?

代码如下:

    section .text

    global _start

        _start:
                    mov EAX, 8
                    mov EBX, filename
                    mov ECX, 0700
                    int 0x80
                    mov EBX, EAX
                    mov EAX, 4
                    mov ECX, text
                    mov EDX, textlen
                    int 0x80
                    mov EAX, 6
                    int 0x80
                    mov eax, 1
                    int 0x80
        
    section .data

        filename db "./output.txt", 0
        text db "hello world", 0
        textlen equ $ - text

--更新:在输出字符串后添加换行符修复它。

【问题讨论】:

    标签: linux assembly nasm


    【解决方案1】:

    将第 3 行更改为: mov ECX, 0x0700

    【讨论】:

    • 八进制 0700 是十六进制 0x1c。或者在 NASM 语法中,0q700。 0x700 是03400 的八进制模式:setgid 和sticky,所有者只读。 (您要更改的行是 creat(2)mode arg。通常您希望通过 0q666 让 umask 适当地对其进行屏蔽。)
    【解决方案2】:

    已修复,请参阅问题中的更新。

    【讨论】:

    • 将答案发布为答案,而不是对问题的编辑。我假设您在 10 年后就知道了,但是由于其他人已经在编辑此问题,因此不妨解决该问题:P
    猜你喜欢
    • 2016-05-12
    • 2016-07-08
    • 2017-12-16
    • 2016-05-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多