• Как на Linux читать и изменять память процесса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Классический способ состоит в использовании системного вызова ptrace с кодами запроса PTRACE_ATTACH для присоединения к процессу, PTRACE_PEEKTEXT и PTRACE_POKETEXT для чтения и записи его памяти и PTRACE_DETACH для отсоединения.
    Ответ написан
    Комментировать
  • Нормален ли такой код?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нормален ли такой код?

    В каком смысле "нормален"? Он понятен, но не очень хорошо организован и делает какие-то с виду лишние действия.
    Ответ написан
  • Как инициализировать n так что бы оно работало для всех введенных n,а не только для 2?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    код работает только для 2 строк , а как записать что бы для всех которые будет вводить пользователь?

    заменить
    int k[2]={};
    на
    int k[100]={};
    Ответ написан
    Комментировать
  • Не запускается ядро Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что я делаю не так?

    Ты не предоставляешь достаточно данных для диагностики. Как ты конфигурировал своё ядро? Как устанавливал?

    Unable to mount root fs on unknown-block(0,0)

    мой хрустальный шар говорит, что ты либо не установил модули своего ядра, либо они не попали в initramfs.
    Ответ написан
    21 комментарий
  • Чем это достигается?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    выбором компилятора? опциями компилятора? неизвестно, ты не привёл никакой полезной информации.
    Ответ написан
    2 комментария
  • В чем логическая ошибка сигсегва?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чем проблема

    ну например find_index_bigger_element может вернуть -1, но ты это не проверяешь и сразу используешь полученный индекс в swap
    Ответ написан
  • Ne sovsem ponyatno kak ispravit, kto podskajet?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ne sovsem ponyatno kak ispravit

    смотреть не туда, куда ты смотришь сейчас (не на определение COMPILE_TIME_ASSERT, с ним всё ок, оно такое, чтобы генерировать ошибку компиляции, когда какое-то условие в коде не выполняется), а в строку
    ../deps/source-sdk-2013/mp/src/public/tier0/threadtools.h:1130

    где этот assert сработал, и разбираться с ней.
    Ответ написан
    6 комментариев
  • Bash не видит переменную после выхода из цикла. В чем может быть проблема?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    файл становится пустым после скрипта
    sed 's/${search%$'\n'}/${replase%$'\n'}/g' $file > $file


    неудивительно, >$file делает файл пустым ещё до вызова sed. Чтобы редактировать файл на месте у sed есть ключ -i:
    sed 's/${search%$'\n'}/${replase%$'\n'}/g' -i "$file"
    Ответ написан
    3 комментария
  • Как исправить ошибки use of deleted functions QT 5.12?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Не понимаю из за чего может быть проблема

    вот из-за этого:
    sockets.push_back(*socket);
    в сообщениях об ошибке написано, что QTcpSocket нельзя копировать, а здесь ты делаешь именно это. Храни какие-нибудь умные указатели в векторе sockets вместо объектов.
    Ответ написан
    Комментировать
  • В чем заключаются ошибки и как их исправить?

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

    Когда ты на С++ пишешь строки подряд, вот так:
    "push edi"  
    "push esi"
    "mov edx,lenS"
    ...

    они склеиваются в одну строку. Когда ассемблер видит команду "push edipush esimov edx, lenS..." он резонно недоумевает.

    как их исправить

    Вставить символы конца строки \n или другие разделители инструкций в ассемблерный код.
    Ты же просил пример кода, вот же он, он компилируется и работает, воспользуйся им. Если непонятно что там написано, задавай вопросы.
    Ответ написан
  • Какие варианты есть здесь для реализации ассемблерной вставки?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    мне бы не помешали еще примеры хорошие

    вот тебе пример переставляющий первую и последнюю буквы:
    #include <iostream>
    
    int main()
    {
        char s1[] = "Hola queridos amigos";
        char tmp;
        asm ("mov (%[left]), %[tmp]\n\t"
             "xchg (%[right]), %[tmp]\n\t"
             "mov %[tmp], (%[left])\n\t"
             : [tmp] "=&q"(tmp)
             : [left] "r"(s1), [right] "r"(s1 + sizeof(s1) - 2)
             : "memory");
        std::cout<<s1<<std::endl;
        return 0;
    }
    Ответ написан
  • Как решить проблему с Find?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    При ситуации, когда был найден вариант файла подобного вида, скрипт впадал в кому
    Экспроприатор (16 сер.) - web-dl1080p.mkv*

    Взять аргументы в кавычки:
    Serials_file_destination=$(basename $Serials_destination)
    заменить на
    Serials_file_destination=$(basename "$Serials_destination")
    и по аналогии в других местах: dirname, mv.
    Ответ написан
  • Копирование на fasm с указанием пути?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Предполагаю как-то через ExpandEnvironmentString.
    Но не могу разобраться.

    В чём разобраться, в ExpandEnvironmentStrings? Дай ей на вход свою строку с переменными, буфер куда она запишет строку с подставленными значениями и его размер. Потом этот буфер дай на вход CopyFile.
    Ответ написан
    1 комментарий
  • Как общаться с процессом в Linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Нужно написать программу, которая будет посылать в stdin программы данные и забирать из stdout.

    Что я делаю не так?


    Ты пользуешься не тем методом. pidfd_open делает совсем не то, что ты ожидаешь, см. раздел "Use cases for PID file descriptors" по приведённой ссылке.

    Взаимодействие с дочерним процессом через stdin/stdout обычно реализуется через пайп. Вот пример.

    Вот ещё пример который делает exec

    #include <unistd.h>
    
    int main()
    {
            int fd[2][2];
            pipe(fd[0]);
            pipe(fd[1]);
            pid_t pid_fork = fork();
            if (!pid_fork) {
                    // Дочерний процесс
                    close(fd[0][1]);
                    close(fd[1][0]);
                    dup2(fd[0][0], STDIN_FILENO);
                    dup2(fd[1][1], STDOUT_FILENO);
                    execl("/usr/bin/tr", "/usr/bin/tr", "l", "r", NULL);
            } else {
                    // Родительский процесс
                    close(fd[0][0]);
                    close(fd[1][1]);
                    char buf[1000];
                    ssize_t sz;
    
                    write(fd[0][1], "hello, world\n", sizeof("hello, world\n") - 1);
                    close(fd[0][1]);
                    sz = read(fd[1][0], buf, sizeof(buf));
                    if (sz > 0) {
                            write(STDOUT_FILENO, buf, sz);
                    }
            }
            return 0;
    }
    Ответ написан
    Комментировать
  • Ошибка с подключением к самописному ftp серверу, в чем проблема?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    в чем проблема?

    У тебя гонка между этим:
    if(pthread_create(&tid, NULL, new_connection, serv)) qDebug() << "ошибка создания потока подключения";
            server->num_of_users++;

    и этим:
    descriptor = *(server->sa[server->num_of_users-1]);


    С точки зрения работы с потоками код написан никак.
    Ответ написан
  • Как сказать процессору "выполни это"?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как сказать процессору «выполни это»?

    Превратить это в бинарник для начала и посмотреть, что там. Это можно (было бы) сделать командой xxd -r dump, но в твоём дампе странный порядок байтов в словах. Можно сначала перевернуть байты, а потом прогнать через xxd:
    sed 's/\([^ ]*\)/\1/;s/ \(..\)\(..\)/ \2\1/g' < dump | xxd -r > bin
    . Прогнав полученный код через дизассемблер можно понять (по переходу к адресу 0x7c05), что это код для бут-сектора:
    $ objdump -b binary -m i8086 -D bin        
    
    bin1:     file format binary
    
    Disassembly of section .data:
    
    00000000 <.data>:
       0:   ea 05 7c 00 00          ljmp   $0x0,$0x7c05
       5:   31 c0                   xor    %ax,%ax
    ...

    Дальше можно записать этот код в образ диска и попытаться загрузиться с него:
    $ head -c 254 /dev/zero >> bin
    $ printf "\x55\xaa" >> bin
    $ qemu-system-i386 -hda bin -d in_asm,exec -D log

    Поискав в созданном логе адрес 7c00 можно увидеть, что код делает при выполнении:
    ----------------
    IN:
    0x00007c00:  ea 05 7c 00 00           ljmpw    $0x0:$0x7c05
    
    Trace 0: 0x7f7a98164f00 [00000000/00007c00/0x40]
    ----------------
    IN:
    0x00007c05:  31 c0                    xorw     %ax, %ax
    0x00007c07:  8e d8                    movw     %ax, %ds
    0x00007c09:  8e d0                    movw     %ax, %ss
    
    Trace 0: 0x7f7a98165040 [00000000/00007c05/0x40]
    ----------------
    IN:
    0x00007c0b:  bc 00 7c                 movw     $0x7c00, %sp
    
    Trace 0: 0x7f7a98165180 [00000000/00007c0b/0x48]
    ----------------
    IN:
    0x00007c0e:  88 16 db 7c              movb     %dl, 0x7cdb
    0x00007c12:  31 c0                    xorw     %ax, %ax
    0x00007c14:  8e c0                    movw     %ax, %es
    0x00007c16:  bb 00 80                 movw     $0x8000, %bx
    0x00007c19:  8a 16 db 7c              movb     0x7cdb, %dl
    0x00007c1d:  b6 00                    movb     $0, %dh
    0x00007c1f:  b1 02                    movb     $2, %cl
    0x00007c21:  b5 00                    movb     $0, %ch
    0x00007c23:  b0 30                    movb     $0x30, %al
    0x00007c25:  e8 53 00                 callw    0x7c7b
    
    Trace 0: 0x7f7a98165280 [00000000/00007c0e/0x40]
    ----------------
    IN:
    0x00007c7b:  b4 02                    movb     $2, %ah
    0x00007c7d:  cd 13                    int      $0x13

    -- он хочет загрузить 48 секторов начиная со второго с текущего диска в память по адресу 0x8000, потом делает какую-то скучную фигню, а потом…
    ----------------
    IN:
    0x00007c2f:  fa                       cli
    0x00007c30:  0f 01 16 f4 7c           lgdtw    0x7cf4
    0x00007c35:  0f 20 c0                 movl     %cr0, %eax
    0x00007c38:  66 83 c8 01              orl      $1, %eax
    0x00007c3c:  0f 22 c0                 movl     %eax, %cr0
    
    Linking TBs 0x7f7a98167580 [00007c2b] index 0 -> 0x7f7a981676c0 [00007c2f]
    Trace 0: 0x7f7a981676c0 [00000000/00007c2f/0x40]
    ----------------
    IN:
    0x00007c3f:  ea 44 7c 08 00           ljmpw    $0x8:$0x7c44
    
    Trace 0: 0x7f7a981678c0 [00000000/00007c3f/0xc0]
    ----------------
    IN:
    0x00007c44:  66 b8 10 00              movw     $0x10, %ax
    0x00007c48:  8e d8                    movl     %eax, %ds
    
    Trace 0: 0x7f7a98167a00 [00000000/00007c44/0x90]
    ----------------
    IN:
    0x00007c4a:  8e c0                    movl     %eax, %es
    
    Trace 0: 0x7f7a98167b40 [00000000/00007c4a/0x90]
    ----------------
    IN:
    0x00007c4c:  8e e0                    movl     %eax, %fs
    0x00007c4e:  8e e8                    movl     %eax, %gs
    0x00007c50:  8e d0                    movl     %eax, %ss
    
    Trace 0: 0x7f7a98167c80 [00000000/00007c4c/0x90]
    ----------------
    IN:
    0x00007c52:  bc 00 c0 07 00           movl     $0x7c000, %esp
    
    Trace 0: 0x7f7a98167dc0 [00000000/00007c52/0xb8]
    ----------------
    IN:
    0x00007c57:  e8 a4 03 00 00           calll    0x8000

    …переключается в защищённый режим и вызывает только что загруженный код.

    как например запихнуть это в exe файл?

    в exe-файл это запихнуть можно, но в таком виде как есть -- это бесполезно, потому что этот код привязан к абсолютным адресам.
    Ответ написан
    Комментировать
  • Как прокручивать консоль Arch linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как прокручивать консоль Arch linux?

    "Консоль" в смысле "голый виртуальный терминал"? Никак. Можно запускать какой-нибудь screen или tmux в виртуальном терминале и "прокручивать" вывод его средствами (не самыми, впрочем, очевидными: ctrl-a-esc).
    Ответ написан
  • Как проверить, является ли файл PE? (то есть, .exe он или нет)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    не понимаю, чем в данном случае является szFile

    Судя по тому, как он используется, szFile -- указатель на буфер с содержимым файла. Почему такой странный выбор типа -- действительно непонятно, логично было бы использовать const void *.
    Ответ написан
    Комментировать
  • Изменить объем раздела /home linux?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Могу ли я на время удалить swap, либо создать его из свободного места, чтобы добавить свободное место в /home?

    легко. ты это можешь сделать даже из запущенного линукса, отключи его (swapoff /dev/nvme1n1p8), а дальше -- делай с разделом что хочешь.
    Ответ написан
    1 комментарий
  • Как обходить возврат функции epoll_wait?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    когда из слушающих сокетов ловиться соединение(accept), оно добовляется в набор для отслеживания еполл_вайтом и тут же возвращается с событием 4. Как? По логике если ты ко мне подключился, я жду от тебя "новостей" с цифрой 1.

    4 -- это EPOLLRDHUP? По логике, если ты принял входящее соединение, а другая сторона на нём сделала shutdown(…, SHUT_WR), чтобы данные могли идти только от тебя к клиенту, то такое поведение ты и получишь.
    Ответ написан
    6 комментариев