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

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

22.02.2020, 17:41. Показов 2987. Ответов 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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8645 / 4480 / 1669
Регистрация: 01.02.2015
Сообщений: 13,888
Записей в блоге: 11
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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8645 / 4480 / 1669
Регистрация: 01.02.2015
Сообщений: 13,888
Записей в блоге: 11
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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8645 / 4480 / 1669
Регистрация: 01.02.2015
Сообщений: 13,888
Записей в блоге: 11
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
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8645 / 4480 / 1669
Регистрация: 01.02.2015
Сообщений: 13,888
Записей в блоге: 11
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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru