Форум программистов, компьютерный форум, киберфорум
Assembler: Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 12.11.2019
Сообщений: 8
NASM

Открытие файла на чтение завершается ошибкой

22.02.2020, 17:41. Показов 3032. Ответов 10

Студворк — интернет-сервис помощи студентам
Нужно открыть текстовый файл для чтения, компилирует нормально при запуске завершается с ошибкой.
Как исправить?
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
%include "io.inc"
 
section .data
file db "text.txt",0
O_APPEND equ 2000o
 
section .bss
descriptor resb 4
 
section .start
global CMAIN
CMAIN:
 
mov eax,5 
mov ebx,file 
mov ecx,2 
mov edx,O_APPEND
int 0x80   
mov [descriptor],eax
 
mov eax,3     
mov ebx,[descriptor] 
mov ecx,2
mov edx,200 
int 0x80 
 
mov eax,6   
mov ebx,[descriptor]   
int 0x80
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2020, 17:41
Ответы с готовыми решениями:

Исходник успешно компилируется в Ubuntu, но компиляция в Debian завершается ошибкой
всем привет... мучался два дня, что ни пишу, все ошибка.... уже внаглую взял, загуглил программку hello world для Ассемблер и скопировал...

Чтение бинарного файла на втором проходе цикла завершается с ошибкой
Добрый день,подскажите как решить проблемку. Читаю бинарный файл в который через некоторое время добавляются новые данные весом 20 КБ.И вот...

Импорт данных из Excel-файла завершается с ошибкой
Пишу вот: public void GetDataTableExcel(string fileName) { Excel.Application excelApp = new...

10
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4495 / 1669
Регистрация: 01.02.2015
Сообщений: 13,904
Записей в блоге: 12
22.02.2020, 17:59
А вы уверены, что выставляя режим открытия
Assembler
17
mov edx,O_APPEND
открываете файл на чтение?

Добавлено через 1 минуту
И почему после открытия файла не проверяете успешность этого открытия, а переходите к обработке файла?
0
0 / 0 / 0
Регистрация: 12.11.2019
Сообщений: 8
22.02.2020, 18:16  [ТС]
Режим вроде как изменил,проверку не знаю как делать если скинете код буду благодарен.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
%include "io.inc"
 
section .data
file db "text.txt",0
 
O_RDONLY equ 0
O_WRONLY equ 1
O_RDWR equ 2
O_APPEND equ 2000o
 
section .bss
descriptor resb 4
section .start
global CMAIN
CMAIN:
 
mov eax,5 
mov ebx,file 
mov ecx,2 
mov edx,O_RDONLY
int 0x80   
mov [descriptor],eax
 
mov eax,3     
mov ebx,[descriptor] 
mov ecx,2
mov edx,200 
int 0x80 
 
mov eax,6   
mov ebx,[descriptor]   
int 0x80
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4495 / 1669
Регистрация: 01.02.2015
Сообщений: 13,904
Записей в блоге: 12
22.02.2020, 18:46

Не по теме:

Я совсем не умею программировать под Linux. Только в общих чертах представляю.


После изменения режима - каков результат?

Проверка успеха открытия файла - думаю, что есть смысл читать описание функции открытия файла. Как-то же такое должно быть возможно.

Для аналогичной функции
- в DOS результат передаётся через флаг переноса
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
        ;1.     открытие исходного файла (функция 3DH);
        mov     ah,     3Dh
        mov     al,     00h             ;открыть для чтения
        lea     dx,     InFileName
        int     21h
        jnc     @@InFileOpenOk ;если открыли - запомнить описатель и обработать файл
        mov     ah,     09h       ;если ошибка - вывести сообщение об ошибке
        lea     dx,     [errFileOpen]
        int     21h
        jmp     @@Exit
@@InFileOpenOk:
        mov     InFileHandler,  ax

- в Windows описатель (дескриптор) файла при ошибке равен какой-то известной константе INVALID_HANDLE_VALUE
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        ;открытие файла на чтение
        mov     [hFile],        INVALID_HANDLE_VALUE
        invoke  CreateFile,\
                        ADDR aszFileName,\      ;file name
                        GENERIC_READ,\          ;open for reading
                        0,\                     ;do not share
                        NULL,\                  ;default security (no security)
                        OPEN_EXISTING,\         ;existing file only
                        FILE_ATTRIBUTE_NORMAL,\ ;normal file
                        NULL                    ;no attr. template
        mov     [hFile],        eax
        cmp     eax,    INVALID_HANDLE_VALUE
        jne     @@ReadFromFile
        invoke  WriteConsole, hConsoleOutput, ADDR aszErrorFileOpen,\
                LENGTHOF aszErrorFileOpen - 1, ADDR BufLen, NULL
        jmp     @@CloseFile
        ;чтение файла и вывод на экран
@@ReadFromFile:

- в Linux - я не знаю
0
Прощай, Мир!
 Аватар для proc3nt
1673 / 831 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
22.02.2020, 18:52
Цитата Сообщение от dragalur Посмотреть сообщение
O_APPEND equ 2000o
могу ошибаться, но что это за цифро-буквенная комбинация значит 2000o..
если восьмеричная система счисления, то почему именно она взята??
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
22.02.2020, 19:17
Цитата Сообщение от dragalur Посмотреть сообщение
при запуске завершается с ошибкой.
У каждой ошибки, кроме автора, есть адрес, имя и другие атрибуты.
Code
1
2
3
4
[0804808b] open(0x74786574, O_RDWR)     = -1 EFAULT (Bad address)
[080480a7] read(-14, 0x2, 200)          = -1 EBADF (Bad file descriptor)
[080480b0] --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xfffffff7} ---
[????????] +++ killed by SIGSEGV (core dumped) +++
И что Вы пытались сделать?
Открыть файл, считать из него что-то?
Куда считать?

Для чего
Assembler
1
mov ecx,2
в 19-й строчке, и для чего в 26-й?

dragalur!
Почитать в общих чертах о распределении параметров системных вызовов linux по регистрам Вы можете,
выдав в терминале команду
Bash
1
man syscall
или
Bash
1
info syscall
Для i386 можно подсмотреть в Linux Syscall Reference
https://syscalls.kernelgrok.com/
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4495 / 1669
Регистрация: 01.02.2015
Сообщений: 13,904
Записей в блоге: 12
22.02.2020, 19:31
Описание open
http://linuxdoc.ru/open-creat.html
http://syscalls.kernelgrok.com/
open, creat - открывают и, по возможности, создают файл или устройство
НАЗВАНИЕ
open, creat - открывают и, по возможности, создают файл
или устройство

СИНТАКСИС
#include
#include
#include

int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
int creat(const char *pathname, mode_t mode);

ОПИСАНИЕ
Вызов open() используется, чтобы преобразовать путь к файлу в описатель файла (небольшое неотрицательно целое число, которое используется с вызовами read, write и т.п. при последующем вводе-выводе). Если системный вызов завершается успешно, возвращенный файловый описатель является наименьшим описателем, который еще не открыт процессом.
......................
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
open и creat возвращают новый описатель файла или -1 в случае ошибки (в этом случае значение переменной errno устанавливается должным образом). Заметьте, что open может открывать файлы устройств, но creat не может создавать их, поэтому используйте для создания функцию mknod(2).
Значения констант O_APPEND, O_RDONLY и других - не смог найти быстрым поиском по сети и пакету nasmx.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
22.02.2020, 19:56
Цитата Сообщение от proc3nt Посмотреть сообщение
если восьмеричная система счисления, то почему именно она взята??
Это вопрос к авторам <fcntl.h>
Bash
1
2
3
4
5
6
cpp << end | tail -2
#include <fcntl.h>
O_RDWR
O_APPEND
 
end
Code
1
2
02
02000
0
0 / 0 / 0
Регистрация: 12.11.2019
Сообщений: 8
22.02.2020, 20:05  [ТС]
Внесу поправки и коментарии в код. Пишу в SASM. Нужно открыть файл и вывести его текст в консоль.При запуске программа завершается аварийно , что SASM не нравится он увы не показывает.Код написан по примеру из методички лабораторной работы. Познание линукса и ассемблера у меня не велики.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
%include "io.inc"
section .data
file db "text.txt"
O_RDONLY equ 0
O_WRONLY equ 1
O_RDWR equ 2
O_CREAT equ 100o ;создание файла, если его нет
O_TRUNC equ 1000o ;очистка файла
O_APPEND equ 2000o ;добавление в конец файла
section .bss
descriptor resb 4 ;переменная для хранения дескриптора файла
section .start
global CMAIN
CMAIN:
mov eax,5
mov ebx,file
mov ecx, O_CREAT | O_TRUNC | O_RDONLY  ;режим доступа к файлу
mov edx, 2                             ;право доступа к файлу
int 80h                                ;открытие файла для записи
mov [descriptor],eax                   ;сохранения дескриптора файла
 
mov eax,3     ;чтение из файла
mov ebx,[descriptor] 
mov ecx,O_RDONLY  ;только для чтения
mov edx,200
int 0x80
 
mov eax,6
mov ebx,[descriptor]
int 80h      ;закрытие файла
Миниатюры
Открытие файла на чтение завершается ошибкой  
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8659 / 4495 / 1669
Регистрация: 01.02.2015
Сообщений: 13,904
Записей в блоге: 12
22.02.2020, 20:34
Выполните по шагам. Увидите и дескриптор открытого файла (т.е. он вообще открылся или не найден)

Кроме того - куда вы читаете из файла?
Прочтите перечень параметров для каждой из функций в справке
http://syscalls.kernelgrok.com/
Вы не те параметры даёте функции чтения - read.

Вы не завершаете программу передачей управления операционке.
1
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
23.02.2020, 08:49
Можно ещё почитать прикреплённую тему в нашем подразделе
Системные вызовы в Linux
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2020, 08:49
Помогаю со студенческими работами здесь

GetMailslotInfo завершается с ошибкой
Здравствуйте! Продолжаю осваивать работу с почтовыми ящиками в Windows. Не знаю, может быть стоило выбрать именованный канал для передачи...

Программа завершается с ошибкой
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; const int size = 20; const int fullfill = 100; // in % const int...

Выборка из БД по ID завершается с ошибкой
Появилась след проблема: есть таблица в БД назовем ее USER, в неи первичный ключ - CODE(varchar). В C# пытаюсь сделать следующее. Есть...

Запуск джоба завершается с ошибкой
Всем привет! Сегодня столкнулся с ситуёвиной - при инициализации пакета выполняется запрос, который для джоба возвращает более 1 строки. ...

Собранное приложение завершается с ошибкой
Здравствуйте. Подскажите пожалуйста новичку. Взял приложение из учебника, переписал в Visual Studio, собрал, а оно выкидывает. Приложение...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru