Ответы пользователя по тегу Linux
  • QT приложение запускается от root но, но не от обычного пользователя?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    strace мне ничего полезного не дал(вероятно там и есть ошибка, но я не могу додуматься и увидеть, что нужно)

    Начни со сравнения логов strace -f -v -e execve,exit,exit_group когда запускаешь от рута и от обычного пользователя.
    Ответ написан
    Комментировать
  • Почему компьютер после выгрузки модуля зависает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    linux-4.15.0/net/netfilter/core.c:353

    Можно начать смотреть отсюда.
    Без кода твоего драйвера можно только гадать, мой хрустальный шар подсказывает, что ты не дождался окончания обработки пакетов своим драйвером перед тем как разрегистрировать его функции и разрешить его выгружать.
    Ответ написан
    Комментировать
  • Почему этот код работает?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    copy_from_user(ips[i], buffer,256);
    
       	printk(KERN_INFO "ips: %s \n", ips[i]);
       	i++;
    
       	if(strncmp(ips[0],"wh",2)==0){

    почему он работает,

    Во-первых этот код неполный, он использует переменные определённые где-то ещё, от того как именно они определены зависит насколько он "работает".
    Во-вторых, по тому что видно, работает он, скажем, так себе:
    - он печатает строчку принятую из юзерспейса без ограничения длины. Если юзер не поставил 0-терминатор, то напечатает мусор из пространства ядра за нефиг делать.
    - копирование происходит в ips[i], где i увеличивается с каждым вызовом, а анализ всегда смотрит на ips[0].
    - в прототипе функции отсутствует аннотация __user у параметра buffer.

    как его можно переписать, чтобы было удобнее читать?

    Я бы сказал, что его и так удобно читать, особенно если форматирование поправить.
    Ответ написан
    Комментировать
  • Почему программа ловит SIGSEGV на инструкции push?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Указатель стека (RSP: 0x00007FFFFFFFEA78) указывает примерно в то же место, где находится код программы (0x7fffffffea75: push rbx). Код обычно защищён от записи, соответственно записать в стек может быть нельзя по этой причине. Кроме того, если записать в стек таки можно, push rbx как раз перепишет саму себя и следующую инструкцию. Без отладчика это может работать за счёт конвейера, но под отладчиком это работать не будет.
    Ответ написан
    Комментировать
  • Почему в среде Linux админов Vim - это тру, а Nano - для слабаков?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    опытные администраторы "не любят", когда кто-то использует nano

    Опытные администраторы могут не любить когда на машине нет vi. А уж чем другие пользуются им должно быть фиолетово.

    Что это - понты, или за этим стоит что-то большее ?

    Если за этим что-то стоит, то обычно это привычка.
    Ответ написан
    4 комментария
  • Почему зависает система после установки драйвера?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Чувак, нельзя из тасклета вызывать vfs. Потому что тасклет -- это атомарный контекст, а вызов vfs 100% блокирующий.
    Используй threaded IRQ handler (request_threaded_irq) или workqueue и вызывай VFS из контекста ядерного потока.
    Ответ написан
    Комментировать
  • Где взять исходники конкретного ядра Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я нашёл .deb пакет интересующего меня 4.18.0-15-generic, но исходники не как не могу найти.

    Короткий ответ: apt-get source <имя пакета>.
    Длинный ответ: все ядра разные, релизы Торвальдса -- одно дело, стабильные релизы Кроа-Хартмана -- другое, а то что используется в твоём дистрибутиве -- третье. Поэтому нужно начать с чёткого понимания того, какое ядро тебе нужно (и для чего). Раз уж ты написал "нашёл .deb пакет интересующего меня 4.18.0-15-generic", то видимо тебе нужно ядро твоего дистрибутива. Получай его методами этого дистрибутива, т.е. -- apt-get source. В скачанных архивах будет оригинальный код ядра из ветки stable и коллекция патчей добавленных мейнтейнерами дистрибутива.
    Ответ написан
    Комментировать
  • Как поменять комментарии коммита из файла?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Прошу помочь с оптимизацией данного скрипта.

    Избавиться от цикла, перенеся логику внутрь команды передаваемой в --msg-filter. Примерно так:

    #!/bin/bash
    
    fille="$1"
    
    cmd=
    
    while read -r line; do
      source=$(echo "$line" | awk 'BEGIN { FS = "," } { print $1} ');
      target=$(echo "$line" | awk 'BEGIN { FS = "," } { print $2} ');
      cmd="${cmd}s,$source,$target,g;"
    done < "$file"
    
    git filter-branch -f --msg-filter "sed -e '$cmd'"
    Ответ написан
    Комментировать
  • Как запретить vs code отлаживать glibc?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как запретить VSC отлаживать такие вещи?

    Непонятно, чего именно вы хотите. Чтоб отладка не заходила в libc? Используйте step over вместо step into. Выбраться из дебрей libc если выполнение остановилось внутри по точке останова по доступу к данным? Используйте finish чтобы остановиться после выхода из функции.
    Ответ написан
  • В каком каталоге находится ядро Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В том, в который его поместил сборщик системы. Оно может вообще не быть доступным из файловой системы (например, быть на отдельном разделе флеш-памяти без файловой системы). Оно может даже не находиться на устройстве, которое его использует (а загрузчик может каждый раз получать его по сети).

    А в классических дистрибутивах оно обычно в /boot.
    Ответ написан
    Комментировать
  • Как открыть dumps в gdb?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как открыть этот дамп в gdb ?

    man gdb: gdb -c *.core
    Ну, т.е., если это на самом деле coredump, т.е. если file *.core говорит что-то такое:
    ELF 64-bit LSB core file
    Ответ написан
    Комментировать
  • Как корректно подключить cinvoke в FASM под ELF64?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    include 'linInclude/proc64.inc'

    В стандартной поставке fasm нет ведь такого файла? Где ты его взял?

    У меня заработал вот такой код:
    format ELF64 executable 3
    
      include '/usr/share/fasm/examples/elfexe/dynamic/import64.inc'
      interpreter '/lib64/ld-linux-x86-64.so.2'
    
      needed  'libc.so.6'
    
      import  exit, printf
    
    segment readable executable
    entry $
    
            lea rdi, [fmtS]
            lea rsi, [msg]
            call [printf]
            call [exit]
    
    segment readable writeable
            msg db 'Hello, World!', 0xA, 0
            fmtS db '%s', 0xA, 0
    Ответ написан
    2 комментария
  • Что лучше начать читать про API linux или про ядро Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Linux API. Исчерпывающее руководство

    С него. Потому что это именно то, что нужно чтобы научиться "программировать под линукс".
    Ответ написан
    Комментировать
  • Почему не видит GPG ключ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    gpg --list-keys
    pub 4096R/353AE8AA 2020-07-13

    Это публичный ключ. И команда выводит только публичные ключи. Приватные ключи можно посмотреть через gpg --list-secret-keys


    при попытке подписать rpm его не видит. Какие возможные причины?
    gpg: signing failed: No secret key

    Для подписи нужен приватный ключ, о чём gpg и говорит.
    Ответ написан
    1 комментарий
  • Возможно ли подключать библиотеки в модуль ядра?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    программу для изменения маршрута пакета в спутниковом сегменте
    планирую всё переписать на Си, сделать модуль ядра

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

    Нужно в идеале кэш и отправку некоторых данных, как я понимаю это всё придётся писать в нуля в ядре

    В ядре есть несколько реализаций специализированных механизмов кеширования. Маршрутизация и отправка данных по идее не должны никак пересекаться.
    Ответ написан
    Комментировать
  • Почему при удалении файла fwrite не возвращает ошибку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В процессе выполнения программы удаляю файл и вижу, что fwrite продолжает возвращать количество записанных байт, при этом файла нет, и он не пересоздается.

    Ты не файл удаляешь, а только его имя из каталога. Файл остаётся до тех пор, пока не будет закрыт последний дескриптор указывающий на него. Все процессы открывшие файл до удаления его имени будут иметь к нему доступ до тех пор. В этом можно убедиться заглянув в /proc/<pid>/fd твоего процесса.
    Ответ написан
    5 комментариев
  • Как сделать loop по директориям с пробелами?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Наверняка есть какое-то просто решение?

    Классика же, разделять имена нулями:
    locate -0 '.txt' | xargs -0 -I\{} echo 'cp "{}" /mnt/e/BOOK'
    Ответ написан
    2 комментария
  • Записать значение команды bash в переменную?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    echo -en 'AT^NDISDUP=1,1,"internet.tele2.ru"\r\n' > /dev/ttyUSB2

    Эта команда чтобы установить соединение? А к моменту вызова команды ip=$(ip addr show wwp0s6u2i1 ... оно уже успевает установиться и интерфейс получает ip-адрес?
    Ответ написан
  • Хук функции в Android shared object?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    *(unsigned int*)&hookProc[6] = function;  // Заменить 4 байта нужным адресом.

    Не, не надо так делать. Правильно будет -- memcpy(hookProc + 6, &function, sizeof(function)).

    (void*)(address & 0x0xFFFFF000), sizeof(hookProc)

    Скорее всего не является причиной проблемы, но выглядит неправильно. Правильно было бы
    (void*)(address & 0xFFFFF000), ((address + sizeof(hookProc) + 0xfff) & 0xfffff000) - (address & 0xfffff000)
    .

    видно, что не изменилась инструкция перехода со сменой режима.

    Ты можешь привести дамп (т.е. адреса и байты) этой области памяти до и после записи?
    Ответ написан
  • Почему вы указали ключ -maxdepth после аргумента без ключа -type, а ключи не являются позиционными (-maxdepth влияет на тесты указанные как перед?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Это же не ошибка а предупреждение. Предупреждает, что другие версии find, строго соответствующие стандарту, могут расценить это как ошибку. Забота о переносимости.
    Ответ написан
    Комментировать