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

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

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

Author24 — интернет-сервис помощи студентам
Нужно открыть текстовый файл для чтения, компилирует нормально при запуске завершается с ошибкой.
Как исправить?
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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2020, 17:41
Ответы с готовыми решениями:

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

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

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

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

10
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.02.2020, 17:59 2
А вы уверены, что выставляя режим открытия
Assembler
17
mov edx,O_APPEND
открываете файл на чтение?

Добавлено через 1 минуту
И почему после открытия файла не проверяете успешность этого открытия, а переходите к обработке файла?
0
0 / 0 / 0
Регистрация: 12.11.2019
Сообщений: 8
22.02.2020, 18:16  [ТС] 3
Режим вроде как изменил,проверку не знаю как делать если скинете код буду благодарен.
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
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.02.2020, 18:46 4

Не по теме:

Я совсем не умею программировать под 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
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
22.02.2020, 18:52 5
Цитата Сообщение от dragalur Посмотреть сообщение
O_APPEND equ 2000o
могу ошибаться, но что это за цифро-буквенная комбинация значит 2000o..
если восьмеричная система счисления, то почему именно она взята??
0
Модератор
2121 / 991 / 169
Регистрация: 23.07.2018
Сообщений: 3,328
Записей в блоге: 3
22.02.2020, 19:17 6
Цитата Сообщение от dragalur Посмотреть сообщение
при запуске завершается с ошибкой.
У каждой ошибки, кроме автора, есть адрес, имя и другие атрибуты.
Код
[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
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.02.2020, 19:31 7
Описание 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
Модератор
2121 / 991 / 169
Регистрация: 23.07.2018
Сообщений: 3,328
Записей в блоге: 3
22.02.2020, 19:56 8
Цитата Сообщение от proc3nt Посмотреть сообщение
если восьмеричная система счисления, то почему именно она взята??
Это вопрос к авторам <fcntl.h>
Bash
1
2
3
4
5
6
cpp << end | tail -2
#include <fcntl.h>
O_RDWR
O_APPEND
 
end
Код
02
02000
0
0 / 0 / 0
Регистрация: 12.11.2019
Сообщений: 8
22.02.2020, 20:05  [ТС] 9
Внесу поправки и коментарии в код. Пишу в 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
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.02.2020, 20:34 10
Выполните по шагам. Увидите и дескриптор открытого файла (т.е. он вообще открылся или не найден)

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

Вы не завершаете программу передачей управления операционке.
1
Модератор
2121 / 991 / 169
Регистрация: 23.07.2018
Сообщений: 3,328
Записей в блоге: 3
23.02.2020, 08:49 11
Можно ещё почитать прикреплённую тему в нашем подразделе
Системные вызовы в Linux
0
23.02.2020, 08:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2020, 08:49
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru