首页 > 解决方案 > 无法将输出写入 NASM 程序集中的文件

问题描述

我正在用 NASM 编写一个汇编程序,并尝试将 2 个内存值的值写入文件(特别是 varDD 和 varDW 的值)。

不幸的是,我在尝试运行它时遇到了分段错误。任何人都可以帮助确定这个问题吗?

请注意,我无论如何都不是装配专家,所以请原谅我无知的错误。

section .data
        fileName db './output.txt', 0
        varDD dd 1.01, 0x00
        varDW dw 'abc', 0x00
        varDDL equ $ - varDD
        varDWL equ $ - varDW
section .text

        global  main


main:

        mov EAX, 8
        mov EBX, fileName
        mov ECX, 0700
        int 0x80
        mov EBX, EAX
        mov EAX, 4
        mov ECX, [varDD]
        mov EDX, [varDDL]
        int 0x80
        mov ECX, [varDW]
        mov EDX, [varDWL]
        int 0x80
        mov EAX, 6
        int 0x80
        mov eax, 1
        int 0x80

        mov eax, 60
        mov edi, 0
        syscall

更新: 所以我更正了以下代码:

section .data
        fileName db './output.txt', 0
        varDD dd 1.01, 0x00
        varDW dw 'abc', 0x00
        varDDL equ $ - varDD
        varDWL equ $ - varDW
section .text

        global  main


main:

        mov EAX, 8
        mov EBX, fileName
        mov ECX, 0700
        int 0x80
        mov EBX, EAX
        mov EAX, 4
        mov ECX, varDD
        mov EDX, varDDL
        int 0x80
        mov EAX, 4
        mov ECX, varDW
        mov EDX, varDWL
        int 0x80
        mov EAX, 6
        int 0x80
        mov eax, 1
        int 0x80

        mov eax, 1
        mov ebx, 0
        int 0x80

这确实会运行并输出一个文件,但是在查看文件的 hexdump 时,内容与所写入变量的预期十六进制值不对应。

十六进制转储:0000000 47ae 3f81 0000 0000 6261 0063 0000 6261 0000010 0063 0000 0000014

更新2: 我更新如下:

section .data
        fileName db './output.txt', 0
        varDD dd 1.01, 0x00
        varDDL equ $ - varDD

        varDW dw 'abc', 0x00
        varDWL equ $ - varDW

strace(相关部分)显示如下:

creat("./output.txt", 01274)            = 3
write(3, "\256G\201?\0\0\0\0", 8)       = 8
write(3, "abc\0\0\0", 6)                = 6
close(3)                                = 0

我应该使用 hexdump 来验证值,但 hexdump 仍然显示:

0000000 47ae 3f81 0000 0000 6261 0063 0000
000000e

这似乎与写入的值不符。62 = b 61 = a 和 63 = c .. 这些是不正常的,我没有看到 1.01 的值。

标签: assemblynasm

解决方案


推荐阅读