Невозможно записать вывод в файл в сборке NASM - PullRequest
0 голосов
/ 10 октября 2018

Я пишу программу сборки в 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.

...