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