Astra linux ошибка сегментирования при запуске приложения

Всем привет. Не могу понять проблему. Astra Linux SE Smolensk 1.5 Захожу под любым уровнем доступа (в данный момент -- под 0). Компилирую любую программу, но при попытке ее запустить, выскакивает "ошибка сегментирования", и внизу экрана появляется информационное сообщение: "Загрузка...

07.08.2019

Всем привет.
Не могу понять проблему.
Astra Linux SE Smolensk 1.5
Захожу под любым уровнем доступа (в данный момент — под 0).
Компилирую любую программу, но при попытке ее запустить, выскакивает «ошибка сегментирования», и внизу экрана появляется информационное сообщение: «Загрузка неподписанного файла заблокирована СЗ ОС (DIGSIG) …».
dmesg выдает сообщение: DIGSIG:[ERROR] NOT SIGNED: path=/home/pavel/Programs/test uid=1000 gid=1000

Собственно вопрос: как разрешить выполнение своих файлов?

Olej


07.08.2019

Захожу под любым уровнем доступа (в данный момент — под 0).
Компилирую любую программу, но при попытке ее запустить, выскакивает «ошибка сегментирования», и внизу экрана появляется информационное сообщение: «Загрузка неподписанного файла заблокирована СЗ ОС (DIGSIG) …».

1. Разрабатывать программный код в защищённой системе — это, по моему (IMHO), дурное занятие … и об этом в том же духе уже высказывались здесь на форуме.

2. Ошибка «ошибка сегментирования» (сигнал SIGSEGV) — это слишком серьёзно для просто нарушения требований безопасности.
Не могли бы вы сказать:
— с какого языка (программирования) компилируете код?
— каким образом (командой)?
— привести фрагмент кода…

3. Не могу, к сожалению, ничего подсказать относительно «подписи» исполнимых файлов — мне дядя за большие деньги не покупал Astra SE :D
Но было бы очень интересно послушать знающих людей, а ещё лучше — ссылки, про то как это должно выглядеть.

07.08.2019

мне дядя за большие деньги не покупал Astra SE :D

не для работы, а лишь для ознакомления можно и с торрента какого-нибудь скачать
не совсем легально, зато познавательно

Последнее редактирование: 07.08.2019

Olej


07.08.2019

Смоленск 1.6: Режим замкнутой программной среды

Настройка режима функционирования механизма контроля целостности файлов при их открытии на основе ЭЦП в расширенных атрибутах файловой системы осуществляется с помощью графического инструмента fly-admin-smc (<<Панель управления — Безопасность — Политика безопасности — Замкнутая программная среда>>) или путем редактирования конфигурационного файла /etc/digsig/digsig_initramfs.conf.

После внесения изменений в конфигурационный файл /etc/digsig/digsig_initramfs.conf и для загрузки модулем digsig_verif ключей после их размещения его в каталогах /etc/digsig/keys/ и /etc/digsig/xattr_keys/
необходимо от имени учетной записи администратора через механизм verb|sudo| выполнить команду:

Код:

sudo update-initramfs -u -k all

Означает ли это, что изменения режима функционирования (1 из 3-х) через fly-admin-smc можно делать «на лету»? (без перегенерации initramfs, перезагрузки и т.д.)

07.08.2019

не для работы, а лишь для ознакомления…

Измените формулировку от греха подальше.
Примерно так: Конечно, некоторые не для работы, а лишь для ознакомления, скачивают Смоленск 1.5 с торрент-трекеров. Но я это не одобряю.
А то какое-то подстрекательство к противоправным действия получается. ;)

07.08.2019

Означает ли это, что изменения режима функционирования (1 из 3-х) через fly-admin-smc можно делать «на лету»? (без перегенерации initramfs, перезагрузки и т.д.)

У меня тоже дяди нет. Проверить не могу, со Смоленском только теория :(

07.08.2019

А то какое-то подстрекательство к противоправным действия получается. ;)

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

07.08.2019

…мне «от дяди» 5 дистрибутивов перепало за полгода благодаря им разнообразил свой лексикон неприличных слов

Есть возможность проверить вопрос из нижеприведенной цитаты?

Означает ли это, что изменения режима функционирования (1 из 3-х) через fly-admin-smc можно делать «на лету»? (без перегенерации initramfs, перезагрузки и т.д.)

07.08.2019

не настолько знаком с линуксом, чтобы ответить
всего полгода изучения, да и то периодически (решаю только возникающие проблемы)

07.08.2019

1. Разрабатывать программный код в защищённой системе — это, по моему (IMHO), дурное занятие … и об этом в том же духе уже высказывались здесь на форуме.

2. Ошибка «ошибка сегментирования» (сигнал SIGSEGV) — это слишком серьёзно для просто нарушения требований безопасности.
Не могли бы вы сказать:
— с какого языка (программирования) компилируете код?
— каким образом (командой)?
— привести фрагмент кода…

3. Не могу, к сожалению, ничего подсказать относительно «подписи» исполнимых файлов — мне дядя за большие деньги не покупал Astra SE :D
Но было бы очень интересно послушать знающих людей, а ещё лучше — ссылки, про то как это должно выглядеть.

Поясню, чтобы было понятнее.
1. Есть свой вычислительный код, с помощью которого собираемся проводить вычисления в защищенной системе. То есть, установить этот код на компьютере в защищенной среде НУЖНО.
Собираю и использую его от имени рядового пользователя, без админских прав.

2. Теперь непонятки: На реальном компьютере под Astra SE все собралось, запускается и работает без проблем. Теперь понадобилось этот код несколько изменить. Для этого на другом рабочем месте (Ubuntu mate) в виртуалке установил Astra SE, где хотел поработать над кодом. И вот тут-то появилась проблема.
Не запускается даже простой «hello_world».
Вот код, если нужно:

C++:

#include <iostream>
int main (int argc, char* argv[]){
   std::cout << "Hello world!n";
   return 0;
}

Язык C++,
компилирую: g++ hello.cc -o hello
запуск: ./hello

Про подписывание я почитал. Но (честно скажу, невнимательно еще читал) остался вопрос: при каждом новом изменении и компиляции программы нужно ее заново подписывать?
И почему на рабочей машине все сработало? Вроде виртуалку старался сделать такую же, как и рабочую машину.

Olej


07.08.2019

при каждом новом изменении и компиляции программы нужно ее заново подписывать?

Да, по логике вещей — при каждом.
Но никто не компилирует программы командами gcc и т.п. — для этого используются сценарии сборки make (Makefile).
Запишите последним действием в Makefile команды подписания собранного — и будет вас счастье.

И почему на рабочей машине все сработало?

Потому что есть 3 режима жёсткости контроля подписи — Режим замкнутой программной среды

и может функционировать в одном из следующих режимов:

  • исполняемым файлам и разделяемым библиотекам с неверной ЭЦП, а также без ЭЦП загрузка на исполнение запрещается (штатный режим функционирования);
  • исполняемым файлам и разделяемым библиотекам с неверной ЭЦП, а также без ЭЦП загрузка на исполнение разрешается, при этом выдается сообщение об ошибке проверки ЭЦП (режим для проверки ЭЦП в СПО);
  • ЭЦП при загрузке исполняемых файлов и разделяемых библиотек не проверяется (отладочный режим для тестирования СПО).

Olej


07.08.2019

На реальном компьютере под Astra SE все собралось, запускается и работает без проблем.

И кто до вас конфигурировал этот реальный компьютер? :p

Olej


07.08.2019

но при попытке ее запустить, выскакивает «ошибка сегментирования», и внизу экрана появляется информационное сообщение: «Загрузка неподписанного файла заблокирована СЗ ОС (DIGSIG) …».

Но если при нарушении условий безопасности действительно выскакивает ошибка SIGSEGV — то вот об этом нужно писать в техподдержку разработчика!

Olej


07.08.2019

не настолько знаком с линуксом, чтобы ответить

А для этого с Linux и знакомым быть не надо…
1. копируете вот те 5 строчек от ТС в файл hello_world.cc — любым редактором (я для таких простых действий предпочитаю mc и его редактор mcedit — только установить стандартно mc нужно);
2. выполняете команду:

3. пробуете выполнить:

4. сообщаете нам сюда о своих успехах…
5. Заходите в системное меню: Панель управления — Безопасность — Политика безопасности — Замкнутая программная среда … и меняете одну из 3-х альтернатив (хорошо бы скриншот этого дела показать сюда)…
6. повторяете попытку запуска, п.3 …

P.S. Это не пустая трата времени для вас, поверьте — это вам ещё много раз пригодится!

Последнее редактирование: 07.08.2019

07.08.2019

В 1.5 нашел только галочку «Запрет установки исполняемого бита». Но он не влияет на компиляцию и запуск (всё прошло успешно как под админской учеткой, так и под пользовательской).
А делать настройки безопасности по RedBook с wiki астры лень(

07.08.2019

А делать настройки безопасности по RedBook с wiki астры лень..

Так а за шо тада деньги плочены!!! :D
А вопрос, может быть в курсе: насколько рекомендации из RedBook-а обязательны к исполнению. Ведомство (иной орган) как-то их регламентируют?

07.08.2019

Так а за шо тада деньги плочены!!! :D
А вопрос, может быть в курсе: насколько рекомендации из RedBook-а обязательны к исполнению. Ведомство (иной орган) как-то их регламентируют?

Слышал, что там разрабатывают свои методички по настройке. Но насколько сильно они перекликаются или отличаются — не в курсе.

07.08.2019

Спасибо, завтра попробую поиграть с этими настройками.

И кто до вас конфигурировал этот реальный компьютер?

Да я и конфигурировал. Я и админ, я и работник :)
Но как-то не встретился с такими проблемами при установке. Если я правильно сейчас вспоминаю, при установке был выбор «включить режим замкнутой программной среды». Видимо, я по-разному ответил на этот вопрос на реальном железе и в виртуалке.

Не всегда программы в Linux запускаются как положено. Иногда, в силу разных причин программа вместо нормальной работы выдает ошибку. Но нам не нужна ошибка, нам нужна программа, вернее, та функция, которую она должна выполнять. Сегодня мы поговорим об одной из самых серьезных и непонятных ошибок. Это ошибка сегментации Ubuntu. Если такая ошибка происходит только один раз, то на нее можно не обращать внимания, но если это регулярное явление нужно что-то делать.

Конечно, случается эта проблема не только в Ubuntu, а во всех Linux дистрибутивах, поэтому наша инструкция будет актуальна для них тоже. Но сосредоточимся мы в основном на Ubuntu. Рассмотрим что такое ошибка сегментирования linux, почему она возникает, а также как с этим бороться и что делать.

Что такое ошибка сегментации?

Ошибка сегментации, Segmentation fault, или Segfault, или SIGSEGV в Ubuntu и других Unix подобных дистрибутивах, означает ошибку работы с памятью. Когда вы получаете эту ошибку, это значит, что срабатывает системный механизм защиты памяти, потому что программа попыталась получить доступ или записать данные в ту часть памяти, к которой у нее нет прав обращаться.

Чтобы понять почему так происходит, давайте рассмотрим как устроена работа с памятью в Linux, я попытаюсь все упростить, но приблизительно так оно и работает.

Допустим, в вашей системе есть 6 Гигабайт оперативной памяти, каждой программе нужно выделить определенную область, куда будет записана она сама, ее данные и новые данные, которые она будет создавать. Чтобы дать возможность каждой из запущенных программ использовать все шесть гигабайт памяти был придуман механизм виртуального адресного пространства. Создается виртуальное пространство очень большого размера, а из него уже выделяется по 6 Гб для каждой программы. Если интересно, это адресное пространство можно найти в файле /proc/kcore, только не вздумайте никуда его копировать.

Выделенное адресное пространство для программы называется сегментом. Как только программа попытается записать или прочитать данные не из своего сегмента, ядро отправит ей сигнал SIGSEGV и программа завершится с нашей ошибкой. Более того, каждый сегмент поделен на секции, в некоторые из них запись невозможна, другие нельзя выполнять, если программа и тут попытается сделать что-то запрещенное, мы опять получим ошибку сегментации Ubuntu.

Почему возникает ошибка сегментации?

И зачем бы это порядочной программе лезть, куда ей не положено? Да в принципе, незачем. Это происходит из-за ошибки при написании программ или несовместимых версиях библиотек и ПО. Часто эта ошибка встречается в программах на Си или C++. В этом языке программисты могут вручную работать с памятью, а язык со своей стороны не контролирует, чтобы они это делали правильно, поэтому одно неверное обращение к памяти может обрушить программу.

Почему может возникать эта ошибка при несовместимости библиотек? По той же причине — неверному обращению к памяти. Представим, что у нас есть библиотека linux (набор функций), в которой есть функция, которая выполняет определенную задачу. Для работы нашей функции нужны данные, поэтому при вызове ей нужно передать строку. Наша старая версия библиотеки ожидает, что длина строки будет до 256 символов. Но программа была обновлена формат записи поменялся, и теперь она передает библиотеке строку размером 512 символов. Если обновить программу, но оставить старую версию библиотеки, то при передаче такой строки 256 символов запишутся нормально в подготовленное место, а вот вторые 256 перезапишут данные программы, и возможно, попытаются выйти за пределы сегмента, тогда и будет ошибка сегментирования linux.

Что делать если возникла ошибка сегментирования?

Если вы думаете, что это ошибка в программе, то вам остается только отправить отчет об ошибке разработчикам. Но вы все-таки еще можете попытаться что-то сделать.

Например, если падает с ошибкой сегментации неизвестная программа, то мы можем решить что это вина разработчиков, но если с такой ошибкой падает chrome или firefox при запуске возникает вопрос, может мы делаем что-то не так? Ведь это уже хорошо протестированные программы.

Первое, что нужно сделать — это обновить систему до самой последней версии, возможно, был баг и его уже исправили, а может у вас установлены старые версии библиотек и обновление решит проблему. В Ubuntu это делается так:

sudo apt update
sudo apt full-upgrade

Если это не помогло, нужно обнулить настройки программы до значений по умолчанию, возможно, удалить кэш. Настройки программ в Linux обычно содержатся в домашней папке, скрытых подкаталогах с именем программы. Также, настройки и кэш могут содержаться в каталогах ~/.config и ~/.cache. Просто удалите папки программы и попробуйте снова ее запустить. Если и это не помогло, вы можете попробовать полностью удалить программу, а потом снова ее установить, возможно, какие-нибудь зависимости были повреждены:

sudo apt remove пакет_программы
sudo apt autoremove
sudo apt install пакет_программы

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

Когда вы все это выполнили, скорее всего, проблема не в вашем дистрибутиве, а в самой программе. Нужно отправлять отчет разработчикам. В Ubuntu это можно сделать с помощью программы apport-bug. Обычно Ubuntu предлагает это сделать сразу, после того как программа завершилась с ошибкой сегментирования. Если же ошибка сегментирования Ubuntu встречается не в системной программе, то вам придется самим искать разработчиков и вручную описывать что произошло.

Чтобы помочь разработчикам решить проблему, недостаточно отправить им только сообщение что вы поймали Segmentation Fault, нужно подробно описать проблему, действия, которые вы выполняли перед этим, так чтобы разработчик мог их воспроизвести. Также, желательно прикрепить к отчету последние функции, которые вызывала программа (стек вызовов функций), это может очень сильно помочь разработчикам.

Рассмотрим, как его получить. Это не так уж сложно. Сначала запустите вашу программу, затем узнайте ее PID с помощью команды:

pgrep программа

Дальше запускаем отладчик gdb:

sudo gdb -q

Подключаемся к программе:

(gdb) attach ваш_pid

После подключения программа станет на паузу, продолжаем ее выполнение командой:

(gdb) continue

segfault

Затем вам осталось только вызвать ошибку:

segfault1

И набрать команду, которая выведет стек последних вызовов:

(gdb) backtrace

Вывод этой команды и нужно отправлять разработчикам. Чтобы отключиться от программы и выйти наберите:

(gdb) detach
(gdb) quit

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

Выводы

Теперь у вас есть приблизительный план действий, что нужно делать, когда появляется ошибка сегментирования сделан дамп памяти ubuntu. Если вы знаете другие способы решить эту проблему, напишите в комментариях!

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

alexfandr

168 / 8 / 1

Регистрация: 15.11.2018

Сообщений: 256

1

Ошибка сегментирования при запуске программе

07.10.2019, 17:07. Показов 4177. Ответов 15

Метки нет (Все метки)


После запуска команды ./runme выходит ошибка сегментирования (после ввода make ошибок не было). Я вообще не шарю в линуксе, в универе мы работаем через PuTTy, а дома через виртуалку debian приходится. Как исправить?

C++
1
2
3
4
5
6
7
#include <iostream>
using namespace std;
extern "C" int PrintValue();
int main() {
    cout << "Результат: " << PrintValue() << endl;
    return 8;
}
Assembler
1
2
3
4
5
6
7
8
9
10
11
global PrintValue
section .data
x dd 40
у dd 35
PrintValue:
        mov rax,[x]
        mov rbx,[y]
        cmp eax,ebx
        jl g1
        mov rax,rbx
g1:     ret

Код

runme: main.cpp asm.о
        g++ -static main.cpp asm.о -о runme
asm.о: asm.asm
        nasm -f elf64 asm.asm -o asm.о

 Комментарий модератора 
alexfandr, загружайте исходники кода, команды компиляции в виде текста, а не изображений. Это одно из правил форума.
Т.к. вы присутствуете на форуме уже около года, это правило должно быть хорошо знакомо.
В следующий раз поступлю с вами нехорошо.



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

07.10.2019, 17:35

2

Студентики, такие студентики. С ассемблером они работают, а отладчик запустить не могут. Хакеры, блин.
Код почти нормальный, но есть но. Размерности данных разные (dd и rax/rbx). Но это не имеет отношения к делу. Значение регистра rbx меняется и не сохраняется. А это ответственность вызываемой функции.



0



168 / 8 / 1

Регистрация: 15.11.2018

Сообщений: 256

07.10.2019, 18:02

 [ТС]

3

Vourhey, это пример из учебника точь в точь. Что сделать надо?



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

07.10.2019, 18:19

4

Лучший ответ Сообщение было отмечено alexfandr как решение

Решение

Цитата
Сообщение от alexfandr
Посмотреть сообщение

это пример из учебника точь в точь.

За этот пример надо автора учебника лишить премии вместе с редактором.

Цитата
Сообщение от alexfandr
Посмотреть сообщение

Что сделать надо?

В идеале — запустить дебаггер и посмотреть, где падает. Не в идеале, исправить код на правильный — с сохранением rbx после вызова функции и надеяться, что это поможет. Код сохранения писать не буду, потому что это даже не смешно. Подумай сам, как это сделать. И да, если этот код где-то работает нормально (как, например, у меня на машине), это не значит что он правильный. Это лишь значит, что случилось везение и С++ компилятор сгенерировал код, который не использует регистр rbx между вызовами.

Добавлено через 12 минут
Либо просто замени rbx на любой другой регистр, для которого нет требования сохранять значение. Можешь посмотреть тут в таблице и выбрать любой:
https://courses.cs.washington…. _recap.pdf



1



168 / 8 / 1

Регистрация: 15.11.2018

Сообщений: 256

07.10.2019, 18:32

 [ТС]

5

Vourhey, я взял регистр r11 и работает, но я все равно не понял как по этой таблице определить регистр для которого не требования. И знак % это какой-то устаревший синтаксис, прост с % мне выдавало ошибку



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

07.10.2019, 18:47

6

Цитата
Сообщение от alexfandr
Посмотреть сообщение

я взял регистр r11 и работает

Отлично.

Цитата
Сообщение от alexfandr
Посмотреть сообщение

И знак % это какой-то устаревший синтаксис,

Это не устаревший синтаксис. Это At&t. Тебя никто не заставляет на нем писать. Надо просто уметь понимать то, что написано в доке. Ассемблер, он хоть с % хоть с без, останется ассемблером.

Цитата
Сообщение от alexfandr
Посмотреть сообщение

но я все равно не понял как по этой таблице определить регистр для которого не требования.

Это столбец saved by



0



168 / 8 / 1

Регистрация: 15.11.2018

Сообщений: 256

07.10.2019, 19:07

 [ТС]

7

Vourhey, Можно еще вопрос? Метка JL означает (X < Y). Я правильно понимаю, если это истинно то выполняется переход к метке g1, а если ложь то выполняется все что до определения метки g1?



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

07.10.2019, 19:29

8

Цитата
Сообщение от alexfandr
Посмотреть сообщение

а если ложь то выполняется все что до определения метки g1?

В данном коде — да. Прыжка не происходит тогда, метка роли не играет здесь.

А по поводу размеров, о которых я выше писал. Они segfault не вызовут, но дадут просто неправильный результат при сравнении. Код, хоть и не падает теперь, но он все равно некорректный.
Можно узнать, что у вас там за учебник такой?



1



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

07.10.2019, 22:17

10

Цитата
Сообщение от alexfandr
Посмотреть сообщение

ну это точнее методичка нашего препода

Это грустно. В этом очень маленьком примере две грубые ошибки. Одна приводит к падению, другая просто не дает правильно работать.



0



168 / 8 / 1

Регистрация: 15.11.2018

Сообщений: 256

07.10.2019, 22:32

 [ТС]

11

Vourhey, какие строчки нужно изменить чтобы код стал корректным? Чтоб я понял, а то мне ещё дальше писать по этой теме лабораторные



0



Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

07.10.2019, 23:17

12

Ошибка одна, я невнимательно мельком глянул на код в начале темы. Из памяти читается 64 бита на каждое число, но в сравнении у тебя половинки регистров по 32 бита. r11 использовать достаточно, чтобы ее исправить.
Сравнивай только eax с r11d не забывай. Но это, конечно, чревато, если потом вдруг где-то захочешь целый регистр заиспользовать. Там будет мусор после чтения y в старших байтах, он не актуален в данном примере, но напороться можно когда-нибудь.



0



168 / 8 / 1

Регистрация: 15.11.2018

Сообщений: 256

08.10.2019, 07:49

 [ТС]

13

Спасибо)



0



Vourhey

Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

08.10.2019, 08:17

14

Пожалуйста. Чтение за границей выделенной памяти тут есть:

mov rbx,[y]

Совсем не грубая ошибка, конечно. Пример работать будет, сравнение тоже. Но dd надо читать так:

Assembler
1
mov ebx, dword [y]

Скажи преподу, чтобы он поправил методичку и исправил эти две вещи



0



168 / 8 / 1

Регистрация: 15.11.2018

Сообщений: 256

08.10.2019, 11:00

 [ТС]

15

Vourhey, Ответ: По этой методичке студенты уже 2 года учатся, иди неумничай, разбирайся



0



Vourhey

Почетный модератор

7388 / 2634 / 281

Регистрация: 29.07.2006

Сообщений: 13,696

08.10.2019, 11:49

16

Фух, я добрался, наконец, до компа. На маленьком экране код писать неудобно. Вот так я бы переписал этот пример из методички:

Assembler
1
2
3
4
5
6
7
8
9
10
11
global PrintValue
section .data
x dd 40
y dd 35
PrintValue:
    mov eax, dword [x]
    mov esi, dword [y]
    cmp eax, esi
    jl g1
    mov eax, esi
g1: ret

Добавлено через 20 минут

Цитата
Сообщение от alexfandr
Посмотреть сообщение

Ответ: По этой методичке студенты уже 2 года учатся, иди неумничай, разбирайся

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



1



  • Печать

Страницы: [1]   Вниз

Тема: Ошибка сегментирования (стек памяти сброшен на диск) [Решено]  (Прочитано 9216 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн
DANNNNN

Привет всем.
Есть программа. Она устанавливается из архива, который предварительно скачивается и после устанавливается.

Программа очень специфичная. Ты ей подсовываешь файл с командами, она его рассчитывает ( математического уклона программа) и выдаёт файл типа out.
И вот вчера при попытке запустить программу она выдаёт:

dan@dan-B450-AORUS-PRO:~/opt/2$ $GAUSS_EXEDIR/g16 NiFeSi2New33.inp
 Unable to open input file "NiFeSi2New33.inp" or "NiFeSi2New33.inp".
Ошибка сегментирования (стек памяти сброшен на диск)
Естественно у меня всего один файл в папке из которой происходит запуск.
Что я делал. Я на создавал кучу входных файлов ( вот этот 3-ий был) и всё  равно прога почему-то видит какой-то второй такой- же файл.  :D

Я обновлял Ubuntu, я перестановил программу поверх старой. Ничего не помогает(.
Помогите кто чем может.

« Последнее редактирование: 18 Марта 2020, 11:41:50 от zg_nico »


Оффлайн
bezbo

Ошибка сегментирования (стек памяти сброшен на диск)

Ошибка сегментации, Segmentation fault, или Segfault, или SIGSEGV в Ubuntu и других Unix подобных дистрибутивах, означает ошибку работы с памятью. Когда вы получаете эту ошибку, это значит, что срабатывает системный механизм защиты памяти, потому что программа попыталась получить доступ или записать данные в ту часть памяти, к которой у нее нет прав обращаться.

Помогите кто чем может

вам остается только отправить отчет об ошибке разработчикам

или запустите программу отладчиком sudo gdb -q


Оффлайн
ReNzRv

И вот вчера

До этого система обновлялась?
Автоматическое обновление системы включено в настройках?


Оффлайн
DANNNNN

Проблема решилась(

Очень странно. Но я взял файл, который до этого запускался и немного изменил в неём параметры на те которые нужны. И всё заработало.

До этого файлы были созданы как копии того файла, который был создан на другом ПК и перенесён на этот комп через флэшку. Все копии этого файла и выдавали ошибку, не смотря на то, что некоторые из них также я переносил и на другие диски, там редактриовали переносил обратно.

Что это было- не понятно.
Короче ошибка в файле О_о.

Системе обновлялась конечно же.

P.S. До написание сюда я просидел часов 5 над проблемой.

« Последнее редактирование: 16 Ноября 2019, 10:18:29 от DANNNNN »


Оффлайн
andytux

«Разруха в головах, а не в клозетах.»

перенесён на этот комп через флэшку. …Короче ошибка в файле

Права на файл.


  • Печать

Страницы: [1]   Вверх

Понравилась статья? Поделить с друзьями:
  • Astra linux execv error
  • Asterix obelix xxl 64 bit patch installation error module 50279
  • Asterix and obelix xxl an installation error occurred module 50279
  • Asterisk probably a dns error for registration to
  • Asterisk db error connect failed