Задать вопрос
  • Что переполняет массив?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    void matrixsort(unsigned int *arr) {
      int temp;
      for (int i = 0; i < M - 1; i++) {

    Здесь должно быть написано for (int i = 0; i < N - 1; i++) потому что это сортировка, а не обход матрицы.

    while (line < N) {
        for (int j = line; j < line + 1; j++) {

    Это какая-то странная конструкция, из-за которой j доходит до N - 1, вызывая ошибку которую ты видишь. Вместо этого можно было выкинуть line вообще и написать просто
    for (int j = 0; j < M; j++) {

    arr0[M] = line;

    Здесь ты портишь элемент матрицы заменяя его номером столбца. Отладка такая?
    Ответ написан
    1 комментарий
  • Сегменты данных, кода это разделение для ассемблера или так хранится в машинном коде?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    На ассемблере в программе есть раздел .text, .bss, .data

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

    Разбит, да. А при линковке некоторые секции можно объединить. Обычно неизменные секции (например .text, .rodata, .tls) объединяют в одну кучу, а все изменяемые (например .bss, .data) объединяют в другую кучу. На "больших" ОС (типа linux) эти кучи эти выравнивают по границе страницы и делают неизменные секции доступными только для чтения. Это помогает сэкономить память и использовать одни и те же страницы для представления неизменных данных в разных процессах.

    для выполнения процессором

    Процессору по большому счёту всё равно как расположено в памяти то, что он выполняет.
    Ответ написан
    Комментировать
  • Почему не получается перемножать и делить assembler?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    mul al,5

    Нет такого опкода. mul вообще на непосредственное значение умножать не может. imul который может, умножает как минимум 16-битное значение в ax.
    Вместо mul умножить на 5 можно через lea (начиная с i386) либо через сдвиг на 2 и сложение.

    idiv cx,4

    idiv так не умеет. Куда проще было бы сделать sar cx, 2
    Ответ написан
    Комментировать
  • Как переназначить клавишу ё -> õ?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Ещö вариант с использованием xmodmap -- добавить в ~/.Xmodmap строчку
    keycode 49 = grave asciitilde otilde Otilde и выполнить xmodmap ~/.Xmodmap
    Ответ написан
    Комментировать
  • Из-за чего возникает ошибка Segmentation fault (core dumped)?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    выдает ошибку Segmentation fault (core dumped).
    В чем причина данной ошибки?

    class Car
        {
             ...
    private:
             std::string Availability;
             std::string brand;
             int carAge;
        };
    ...
    Car machine;
    while (fin.read((char*)&machine, sizeof(Car)))

    В том, что нельзя сложные объекты так записывать в файл и читать из файла. Так можно обращаться с объектами содержащими свои данные в непрерывном участке памяти. std::string к таким классам объектов не относится.
    Ответ написан
    8 комментариев
  • Не могу решить лабу по ассемблеру?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    mov al,x
    cmp al,a
    jg sled1
    mov bl,a
    ...


    как сделать разветвление от условия, если это условие не удовлетворяет.

    Если условие не удовлетворено, инструкция jg sled1 не совершает перехода и ты просто выполняешь следующую за ней инструкцию -- mov bl, a. Ветвления и переходы в твоём коде выглядят правильно.
    Ответ написан
    Комментировать
  • QT приложение запускается от root но, но не от обычного пользователя?

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

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему?

    Потому что scanf("%s", name) сканирует поле до первого пробельного символа.
    Если ты хочешь строчку до конца строки используй, например, scanf("%[^\n]", name)
    Ответ написан
    5 комментариев
  • Почему компьютер после выгрузки модуля зависает?

    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.

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

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему выводит только первую строку а остальные что-то непонятное?

    int print_arr(int str, int stlb, int matr[][stlb]){
    ...
    }
    
    int mass[10][10];
    ...
    print_arr(N, L, &mass[k][i]);


    Здесь две ошибки:
    - во-первых ты пообещал, что передашь в print_arr массив, последняя размерность которого равна второму параметру функции, а передаёшь массив, вторая размерность которого равна 10 и никак от второго параметра не зависит
    - во-вторых вместо массива ты передаёшь адрес элемента, который ты даже не заполнил.

    Если уж ты решил использовать VLA, то делай это последовательно, например так:

    int  main()
    {
        int L = 0, N = 0, k, i;
        scanf("%d", &N);
        L=N;
        int mass[N][L];
        for(k = 0; k < N; k++){
            printf("[%d]\n", k);
            for(i = 0; i < L; i++){
        	    scanf("%d", &mass[k][i]);
            }
        }
        printf("matrix NxN\n");
        print_arr(N, L, mass);
        return 0;
    }
    Ответ написан
    Комментировать
  • Почему программа ловит SIGSEGV на инструкции push?

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Правильный ли ход мыслей?

    Да.
    Одни ассемблеры имеют одну мнемонику для нескольких опкодов с разным двоичным представлением (например на i8086 мнемоника mov выполняет множество разных видов перемещений данных между регистрами/памятью, конкретный опкод выводится из операндов), другие имеют для этого разные мнемоники (например на i8080 мнемоники mov, mvi, lda, ldax, sta, stax, lxi выполняют каждая свой вид перемещения данных между регистрами/загрузку/выгрузку из памяти/загрузку непосредственных значений).
    Ответ написан
    3 комментария
  • Отладка небольших ассемблерных кусков кода?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    только проблема в том, что в gcc формат ассемблерных вставок другой

    Разберись, потом будешь использовать его с удовольствием:
    int main() {
      int a = 1;
      int b = 3;
      int c;
    
      asm (
        "mov %[a], %[c]\n\t"
        "add %[b], %[c]\n\t"
        : [c] "=mr" (c)
        : [a] "mr" (a), [b] "mr" (b));
    
      printf("a + b = %x + %x = %x\n", a, b, c);
    }
    Ответ написан
    1 комментарий
  • Почему не сканирует диспетчер задач?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    process[i] = OpenProcess(PROCESS_ALL_ACCESS, false, proc.th32ProcessID);

    Обычный пользователь сможет открыть только свои процессы с доступом PROCESS_ALL_ACCESS. Для всех остальных процессов этот вызов завершится с ошибкой.
    Чтобы вызвать GetProcessMemoryInfo PROCESS_ALL_ACCESS не нужен.
    Ответ написан
    Комментировать
  • Ассемблер практикуют написанием драйверов и вирусов?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как его ещё практикуют?

    чтением. Читая ассемблерный вывод компиляторов можно узнать как они реализуют те или иные вещи.
    Ответ написан
    Комментировать
  • Почему не работает мой код С?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Судя по коду, там где написано scanf("%d", &d); имелось в виду scanf("%d", &nUm);.

    nUm = nUm % d;// делим на него

    Здесь должно быть написано nUm = nUm / d;// делим на него

    Кроме того, d может делить nUm больше чем 1 раз, это можно проверить сразу, и разделить nUm на d столько раз, сколько можно. Тогда не надо будет делать этого:
    d=2; //обнуляем переменную d
    Ответ написан
  • Почему в среде Linux админов Vim - это тру, а Nano - для слабаков?

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

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

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

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

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    В чем моя ошибка?

    temp[i] == ' '

    в этом. Должно быть !=
    Ответ написан
    1 комментарий
  • Почему не совпадают результаты sha1?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    почему так?

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