Задать вопрос
  • Почему не совпадают результаты sha1?

    jcmvbkbc
    @jcmvbkbc
    Ну вот смотри, я пишу в консоли
    $ xxd -r | sha1sum
    0 c7 6f 17 f1 91 05 de 28 39 da b1 ea a2 a2 98 56
    10 3d 67 df 21
    8bb986c5259323914d0b68d0748430bf0cc31a63  -

    -- хэш совпадает с твоим. Это говорит мне о том, что и ты и я понимаем одинаково что ты делаешь.
    А вот как получить то что ты получаешь с сайта с твоими исходными данными -- я хз.
  • Найти сумму интервалов c++, вылазит ошибка?

    jcmvbkbc
    @jcmvbkbc
    Собственно в чем потенциально может быть проблема?

    Построй своё приложение с отладочной информацией (ключ -g компилятору и линковщику если линкуешь отдельным шагом) и дай санитайзеру самому сказать тебе, где проблема -- вместо /workspace/test+0x42590b он покажет тебе конкретно исходник и номер строки.
  • Как встроить dll в exe?

    jcmvbkbc
    @jcmvbkbc
    в каталоге bin только динамические библиотеки (dll) находятся...

    ...а где-нибудь в каталоге lib лежат статические файлы .a (или .lib). Если добавить в команду сборки опцию -Wl,-t то линковщик выведет список использованных библиотек с путями.
  • Как узнать количество чисел в файле txt?

    jcmvbkbc
    @jcmvbkbc
    пока fscanf() возвращает true.

    Dalp, fscanf возвращает не true/false, а количество успешно отсканированных полей либо EOF в случае достижения конца файла.
  • Как узнать количество чисел в файле txt?

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

    fopen, fscanf
  • Как найти полусумму 32-битных знаковых чисел?

    jcmvbkbc
    @jcmvbkbc
    Или у вас есть более красивое предложение?

    Конечно, есть идиома для этого:
    int64_t sv = ((uint64_t)uv ^ 0x80000000) - 0x80000000;


    А long long - стандартный 64-битный тип.

    Это ссылка 1) на вики 2) о с++. long long -- это "как минимум 64-битный тип".
  • Как найти полусумму 32-битных знаковых чисел?

    jcmvbkbc
    @jcmvbkbc
    Читайте ей по 4 байта 2 раза в char buf[4].
    ...
    (int)buf[3] << 24 | (int)buf[2] << 16 поставит на место 2 старших байта

    Не, не поставит. Вернее, не всегда. Примерно в половине случаев. А в другой половине случаев в верхних 8 битах окажутся единицы, а вся операция будет UB.

    Тип 64-х битных чисел - long long. Вам в условии посоветовали им пользоваться.

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

    Сложить 2 числа сами сможете?

    Нужно вычислить полусумму этих чисел, округляя полученный результат вниз.

    А тут ещё в операции деления будет загвоздка. Потому что стандартный оператор деления округляет к 0 а не вниз.
  • Парсинг строки не через strtok на СИ. В чем заключается ошибка?

    jcmvbkbc
    @jcmvbkbc
    res2001, санитайзер -- инструмент, он несовершенен, но его можно улучшать (что вы и сделали). Но как инструмент он куда мощнее valgrind'а, потому что ему доступна вся информация из исходного кода. Например на следующий код valgrind ведь даже не почешется, в отличие от asan:

    #include <string.h>
    
    int i;
    int j;
    
    int main()
    {
            void *pi = &i;
            char buf[8];
            void *pj = &j;
    
            memset(buf, 0, 16);
    }
  • Парсинг строки не через strtok на СИ. В чем заключается ошибка?

    jcmvbkbc
    @jcmvbkbc
    Почему не работает, если в else дописать free(buf)?

    Потому что у тебя по-прежнему переполнение буфера в этих местах (ты выделяешь strlen(buf), а надо на 1 байт больше):

    parsed_string[(*size) - 1] = (char *)malloc(strlen(buf));
                strcpy(parsed_string[(*size) - 1], buf);


    И чтобы два раза не вставать: опция компилятора gcc -fsanitize=address и программа valgrind могут тебе без нашей помощи говорить, где ты вылез за границы буферов.

    Например, для твоей оригинальной программы:
    $ gcc -fsanitize=address -g mem.c -o mem
    $ ./mem mem.txt 
    =================================================================
    ==14939==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000000074 at pc 0x7eff8b502550 bp 0x7ffc978328c0 sp 0x7ffc97832070
    READ of size 5 at 0x602000000074 thread T0
        #0 0x7eff8b50254f in __interceptor_strlen ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:301
        #1 0x55cda292992b in parse_string /home/jcmvbkbc/tmp/toster/mem.c:84
        #2 0x55cda2929492 in variable_processing /home/jcmvbkbc/tmp/toster/mem.c:55
        #3 0x55cda2929377 in main /home/jcmvbkbc/tmp/toster/mem.c:31
        #4 0x7eff8b2bd09a in __libc_start_main ../csu/libc-start.c:308
        #5 0x55cda2929219 in _start (/home/jcmvbkbc/tmp/toster/mem+0x1219)
    
    0x602000000074 is located 0 bytes to the right of 4-byte region [0x602000000070,0x602000000074)
    allocated by thread T0 here:
        #0 0x7eff8b543720 in __interceptor_realloc ../../../../src/libsanitizer/asan/asan_malloc_linux.cc:105
        #1 0x55cda29296de in parse_string /home/jcmvbkbc/tmp/toster/mem.c:79
        #2 0x55cda2929492 in variable_processing /home/jcmvbkbc/tmp/toster/mem.c:55
        #3 0x55cda2929377 in main /home/jcmvbkbc/tmp/toster/mem.c:31
        #4 0x7eff8b2bd09a in __libc_start_main ../csu/libc-start.c:308
    
    SUMMARY: AddressSanitizer: heap-buffer-overflow ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:301 in __interceptor_strlen
    Shadow bytes around the buggy address:
      0x0c047fff7fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c047fff7fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c047fff7fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c047fff7fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
      0x0c047fff7ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    =>0x0c047fff8000: fa fa fd fa fa fa fd fa fa fa fd fa fa fa[04]fa
      0x0c047fff8010: fa fa 00 fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c047fff8020: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c047fff8030: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c047fff8040: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
      0x0c047fff8050: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
    Shadow byte legend (one shadow byte represents 8 application bytes):
      Addressable:           00
      Partially addressable: 01 02 03 04 05 06 07 
      Heap left redzone:       fa
      Freed heap region:       fd
      Stack left redzone:      f1
      Stack mid redzone:       f2
      Stack right redzone:     f3
      Stack after return:      f5
      Stack use after scope:   f8
      Global redzone:          f9
      Global init order:       f6
      Poisoned by user:        f7
      Container overflow:      fc
      Array cookie:            ac
      Intra object redzone:    bb
      ASan internal:           fe
      Left alloca redzone:     ca
      Right alloca redzone:    cb
    ==14939==ABORTING

    Вот это:
    READ of size 5 at 0x602000000074 thread T0
        #0 0x7eff8b50254f in __interceptor_strlen ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:301
        #1 0x55cda292992b in parse_string /home/jcmvbkbc/tmp/toster/mem.c:84

    как раз указывает на вызов strlen с буфером без 0-терминатора.
  • C++ или Си, на каком языке программы выполняются быстрее?

    jcmvbkbc
    @jcmvbkbc
    код на ассемблере выполнится быстрее чем на python

    Kaktys_DH, а вот бесконечный цикл на ассемблере выполнится быстрее чем на питоне, например?
  • Какие дистрибутивы линукса позволяют при установке выбрать шифрование всего HDD?

    jcmvbkbc
    @jcmvbkbc
    ...от жены там, соседа, ремонтной мастерской...
    Но зачем /bin например шифровать?

    Чтобы жена, сосед и ремонтная мастерская не подменили софт который спрашивает пароль от /home на софт, который этот пароль куда-нибудь, например, сохраняет.
  • Как разделить файл по переносам?

    jcmvbkbc
    @jcmvbkbc
    Я уже поменял если что.

    Trimsky, актуальный код покажи. Весь.
  • Как разделить файл по переносам?

    jcmvbkbc
    @jcmvbkbc
    Ничего, что у тебя сверху separator, а в цикле -- delim?

    Trimsky, а на этот вопрос не ответишь? Это я к тому, что 1-то ты видишь, а значит первый разделитель нашёлся.
  • Как найти неправильную работу с памятью?

    jcmvbkbc
    @jcmvbkbc
    gcc -o -g progr *.o -lm

    я не знаю вообще что делает, собирает программу с именем "-g", наверно (-o -g)?
    Нет нужды в твоём случае отдельной командой линковать, можно компилировать и линковать одной командой gcc -g *.c -o progr -lm
  • Как найти неправильную работу с памятью?

    jcmvbkbc
    @jcmvbkbc
    Georgy123, смотри внимательно. Вот я накидал программку для теста, вот что показывает без -g:
    ==11828== Invalid read of size 1
    ==11828==    at 0x109153: main (in /home/jcmvbkbc/tmp/toster/a.out)
    ==11828==  Address 0x4a4204a is 0 bytes after a block of size 10 alloc'd
    ==11828==    at 0x483577F: malloc (vg_replace_malloc.c:299)
    ==11828==    by 0x109146: main (in /home/jcmvbkbc/tmp/toster/a.out)

    а вот что с -g:
    ==11846== Invalid read of size 1
    ==11846==    at 0x109153: main (vg.c:6)
    ==11846==  Address 0x4a4204a is 0 bytes after a block of size 10 alloc'd
    ==11846==    at 0x483577F: malloc (vg_replace_malloc.c:299)
    ==11846==    by 0x109146: main (vg.c:4)

    видишь разницу?
  • Появляется ошибка AccessViolationException: «Попытка чтения или записи в защищенную память». В чем может быть проблема?

    jcmvbkbc
    @jcmvbkbc
    A=%5i\nB=%5i\nC=%5i\nD=5i\nE=%f\n=%f\nH=\''%s\''",A,B,C,D,E,F,G,H

    В строке формата A, B, C, D -- целочисленные, E и нечто без имени -- плавающие и H -- строка. А в аргументах есть ещё G. Это тоже надо исправить.
  • Как поместить параметр в стек?

    jcmvbkbc
    @jcmvbkbc
    массив нужно передать, а в ассемблере их нет

    Olegofr3n77, в ассемблере есть адреса, а массив -- это непрерывный участок памяти начинающийся с заданного адреса.
  • Убрать указание размера функции?

    jcmvbkbc
    @jcmvbkbc
    Где можно найти размеры типов данных?

    armadillo-cld, проще всего -- в заголовочных файлах где они определены.
    Прямее всего -- написав программу которая будет печатать sizeof нужных типов.
    Но зачем, если можно сдампить список экспортированнх функций из нужных библиотек, прогнать их через sed скрипт типа того: 's/\([^@]*\)/#define \1 \1/' и подключить получившийся файл?