LINUX.ORG.RU

Сообщения codergeneration

 

Разыскиваю медиаплеер на linux

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

codergeneration
()

Пропуск ошибочных конструкций в yacc

Пишу анализатор на yacc/lex ассемблерных файлов. Пока что он должен разобрать входной файл и вывести его же: совпали файлы - хорошо, не совпали - не хорошо. Для упрощения написал грамматику только непосредственно для инструкций, а все остальные конструкции (которые не подходят под грамматику) хочу вывести без изменений. Для вывода конструкций, не являющихся инструкциями хочу использовать встроенный механизм обработки ошибок yacc - добавил правило с error. Внутри правила вывожу значение соответствующей переменной, но получаю не совсем то, что хотел - ожидал, что получу все значение строки, которую парсер не смог разобрать, а получаю только небольшой ее кусок. Есть какие-нибудь способы решить эту проблему?

codergeneration
()

Вычисления по mod 2^m

Есть для Linux простая библиотека, которая позволит проводить быстрые вычисления по mod 2^m для различных m? От нее реально надо только умение считать a+b и a*b + скорость вычисления + простота использования. Заранее спасибо

codergeneration
()

контроль приложений системы

Использую Ubuntu для разработки, по этому приходится довольно много проводить времени с этой системой. Периодически ставлю нужные программы, в общем, пользуюсь системой. Беспокоит вопрос сохранности моих данных: где гарантия, что последний установленный мной шестнадцатиричный редактор не сливает мои исходники в инет? Права доступа тут не сильно помогут. Пример, конечно мифический, но при большом количестве разнородного ПО такая ситуация вполне возможна. Изучил ситуацию с защитным ПО: все сводится к iptables, либо GUI для него. На мой взгляд, проблему можно решить только методом слежения за активностью приложений - какие файлы читает, куда лезет в сети и тд. Может, кто-то встречал все-таки продукты, способные решить эту проблему?

Заранее спасибо за ответы.

codergeneration
()

Библиотеки .so, их использование и разработка

Всем доброго дня!

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

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

Во-вторых, исследуя получающиеся на выходе компилятора .so с помощью readelf обнаружил, что среди символов лежат все присутствующие в коде библиотеки функции. Это не есть хорошо: они занимают лишнее место, да и незачем выставлять на показ внутренние функции. В этом вопросе мне вспоминается опыт написания dll в NT - там я помечал функции, которые я хочу экспортировать. Более того, мне вспоминается, что при ручном импортировании функций из библиотеки в NT как-то можно было вообще не использовать имена функций, а лишь ее номер. Мне кажется в данном случае это было бы даже оправданно. И выкинуть имена всех символов, чтобы кто не знает - не пользовался. Можно ли сделать экспорт только нужных функций и по возможности с доступом не по именам, а по номерам?

В-третьих, в статье "Анатомия динамических библиотек Linux" прочитал, что при подгрузке библиотеки, у нее автоматически вызывается функция инициализации. Иногда ее иметь действительно полезно. Но, действуя по описанию, фактически я только добавил ключ компиляции у gcc и не создавал никаких процедур. Компилятор не заругался. Можно ли добавить процедуру инициализации и деинициализации в библиотеку или в статье наврали?

И, наверное, тупой вопрос. Можно ли загрузить библиотеку из ее mmap образа или напрямую из фрагмента файла без сохранения на диск во временный файл? Это для быстрого холодного старта из архива поставки продукта.

codergeneration
()

fseek & fputc & ftell

Здравствуйте! Занимаюсь заполнением файла и столкнулся со следующей проблемой: необходимо в конце файла пропустить место под стркутурку, записать данные, а потом вернуться и вписать структурку в оставленное место. С помощью ftell запомнил место, куда буду сохранять структурку, с помощью fseek пропустил место. Начинаю по байтам формировать и записывать данные. После первого же вызова fputc функция ftell начинает возвращать позицию, как будто я не сдвигался в файле функцией fseek и не оставлял места. Хотя до первого вызова смещение в файле правильное. Файл отркыт с опцией "ab". Кто-нибудь может подсказать решение? Заранее спасибо!:)

codergeneration
()

elf, образ ядра

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

Насчет доступа к образу ядра в памяти есть некоторые наработки, так что тут вроде все понятно. Погуглил в сторону образа ядра на диске (/boot/vmlinuz-2.6.xx.xx). Выяснил, что это запакованный gzip elf файла ядра, перед которым лежит код распаковщика и загрузчика. Выдернул из этого файла архив ядра по статье http://bappoy.pp.ru/2008/09/05/extracting-vmlinux.html , посмотрел на него:), потыкался objdump`ом.

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

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

codergeneration
()

Отладка модуля ядра Linux

Подскажите, пожалуйста, нормальную статью, по которой можно было бы научиться отлаживать модули ядра. Пару дней назад уперся в непонятную багу в своем модуле, которую не могу поймать с помощью printk. Понял, что надо все-таки научиться пользоваться отладчиком. В связи с этим уже второй день ползаю по инету в поисках инфы, но руководства, по которому смог бы разобраться не нашел. Пока что я понял, что надо как-то скомпилировать ядро с отладочной информацией, поставить копию этого ядра без отладочных символов в отлаживаемую виртуальную машину как-то. Прописать в вмваре строчку, чтобы включить режим дебаги и подключиться с помощью gdb к ней.

Последнее вроде плучилось - gdb похоже подключился к системе. А вот с ядром не понятно что делать.

До этого я писал только драйвера под винду, так что примерно представляю процесс дебага - надо в начало модуля добавить int 3, чтобы всплыл отладчик, когда модуль начнет грузиться, а там уже бряки и все дела. Будет ли работать такая стратегия с gdb?

codergeneration
()

модификация памяти ядра

Столкнулся с необходимостью модификации памяти в ядре. Для этого написал маленький модуль ядра, который должен править. Проблема в том, что попытка записи проваливается: BUG: unable to handle kernel paging request at хххххххх. И остальные Oops. Есть мысль, что проблема связана с тем, что у этой страницы памяти не установлен атрибут записи. Нашел функцию mprotect, но судя по всему ей можно пользоваться только из пользовательского пространства.Как быть? Чем воспользоваться, чтобы все-таки записать по этому адресу? Причем память по этому адресу точно существует - я ее без проблем могу читать.

codergeneration
()

Создание переносимого в пределах 2.6.* модуля ядра

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

codergeneration
()

RSS подписка на новые темы