Я пытаюсь реализовать в GAS простую тестовую программу, которая открывает файл, записывает ему текст и выходы. Однако системный вызов «open» продолжает возвращать «-14» («EFAULT - плохой адрес», если я правильно понимаю). Программный код выглядит следующим образом:Не удается открыть файл в Linux через 0x80
.intel_syntax noprefix
.section .data
textoutput:
.asciz "Hello world!"
pstr_end:
.set lentext, pstr_end - textoutput
filetoopen:
.asciz "/tmp/tsttxt"
.section .text
.globl main
.func main
main:
mov eax, 5 # open
mov ebx, filetoopen # filname
mov ecx, 2 # flags: read and write
mov edx, 0700 # mode
int 0x80
mov ebx, eax # <<< !!! eax here contains -14
mov eax, 4
mov ecx, textoutput
mov edx, lentext
int 0x80
mov eax, 1
mov ebx, 0
int 0x80
проблема, кажется, с filetoopen
строки (страница руководства к open
говорит, что EFAULT означает pathname points outside your accessible address space
.) Является ли filetoopen
правильно объявленный в коде программы? Что может быть причиной этой ошибки?
Спасибо.
Я бы рассмотрел использование YASM или NASM, если вы собираетесь использовать синтаксис Intel для чистого программирования сборки. Их синтаксис Intel «лучше». –
@ Jonathon Мне нравится, что с GAS можно использовать Eclipse для работы с ассемблером (подсветка синтаксиса, отладка и т. Д.) –