无法将输出写入NASM程序集中的文件

时间:2018-10-10 19:31:34

标签: assembly 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

这会运行并输出文件,但是在查看文件的十六进制转储时,其内容与所写变量的预期十六进制值不符。

十六进制转储: 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的值。

0 个答案:

没有答案