• Что можно улучшить в этой функции?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    можно ли ее как-то улучшить

    Зависит от того, что считать улучшением.
    По размеру кода -- вряд ли можно улучшить существенно.
    По скорости -- можно, если загружать данные из памяти выравненными словами и раскрутить цикл.
    По простоте -- можно существенно улучшить, переписав её на С или вообще воспользовавшись готовой реализацией.
    Ответ написан
    1 комментарий
  • Почему не срабатывает шеллкод?

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

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

    Байты из зеленой области, как я понял, это информация линкера golink. Так ли это?

    Это заголовок файла формата PE. Да, его туда записал линкер. Нет, это не информация линкера, это информация в основном для загрузчика ОС, а так же для дизассемблера и прочих binutils.
    Ответ написан
    1 комментарий
  • Не пушится клон в оригинальную папку?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Вот он же тебе пишет возможный вариант решения:
    You can set the 'receive.denyCurrentBranch' configuration variable
    to 'ignore' or 'warn' in the remote repository to allow pushing into
    its current branch


    Зайди на свой удалённый сервер и в этот репозиторий в .git/config добавь
    [receive]
    denyCurrentBranch = ignore


    А если соберёшься работать с вычекнутой веткой на удалённом сервере -- не забудь сделать git reset --hard перед началом, чтобы синхронизировать рабочий каталог.
    Ответ написан
    1 комментарий
  • Корректный ли ассемблерный код?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Подскажите пж, в чем может быть проблема?

    Скорее всего в том, что ты не умеешь пользоваться отладчиком.

    Вообще код выглядит нормально. Предлагаю написать в консоли REG DELETE HKCU\keys /v key и убедиться, что желаемое действие происходит (я так понимаю, что keys и key -- это затычки, в реальном коде указаны конкретный путь в реестре и конкретное имя значения).

    Для разнообразия можно убрать xor eax, eax после возврата из WinExec, чтобы результат пришёл в ExitProcess -- и посмотреть на код завершения процесса.
    Ответ написан
    2 комментария
  • Как применить изменения к НЕ последнему коммиту?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Есть ветка и три коммита в ней AAA-BBB-CCC...
    Далее были сделаны правки, но их надо применить к коммиту BBB

    git commit -a -m fixes
    git rebase -i AAA

    перенести fixes после BBB, заменить pick перед fixes на fix.

    Всё то же самое, но автоматически:
    git commit -a --fixup BBB
    git rebase --autosquash AAA
    Ответ написан
    1 комментарий
  • Как вывести элементы матрицы, которые находятся ниже главной диагонали?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    int **matrix = (int**)malloc(matrix_size * sizeof(int));

    Должно стать
    int **matrix = (int**)malloc(matrix_size * sizeof(int *));

    потому что ты выделяешь массив указателей, а не массив целых чисел, а sizeof(int) вполне может быть не равно sizeof(int *).

    for (int i = 0; i < matrix_size; ++i)
        {
            for (int j = 0; j < matrix_size; ++j)
            {
                if(i > j)
                {
                    arr[i] = matrix[i][j];
                }
            }
        }


    Должно стать
    counter = 0;
        for (int i = 0; i < matrix_size; ++i)
        {
            for (int j = 0; j < matrix_size; ++j)
            {
                if(i > j)
                {
                    arr[counter++] = matrix[i][j];
                }
            }
        }


    потому что иначе все элементы находящиеся в одной строке matrix ты складываешь в один и тот же элемент массива arr.
    Ответ написан
    Комментировать
  • Как найти максимальную площадь?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Проще всего варьировать один из оставшихся углов, например B -- от 0 до pi - alpha и считать площадь как его функцию:
    S = 1 / 2 * a^2 * sin(B) * sin(pi - alpha - B) / sin(alpha)
    . Остаётся найти максимум этой функции на данном промежутке значений B.
    См., откуда (из первого альтернативного представления) следует alpha + 2 * B = pi => B ( = C) = (pi - alpha) / 2, т.е. равнобедренный треугольник имеет максимальную площадь.
    Ответ написан
    Комментировать
  • Почему я должен писать именно так, а не иначе?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему я не могу убрать скобки, или ещё что-нибудь, и написать так, как мне хочется. В общем, где все это определено?

    Это определено спецификацией языка на котором вы пишете. Среди прочего она определяет грамматику языка (т.е. как можно писать) и семантику языковых конструкций (т.е. что написанное так или иначе обозначает).
    Ответ написан
    Комментировать
  • Как пройтись по парам файлов?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как пройтись циклом по этим парам в bash?


    Например так:

    for INPUT in input*.txt ; do
      OUTPUT=output${INPUT#input}
      ...
    done
    Ответ написан
    Комментировать
  • Как "склеить" строку?

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

    Считались за одну -- шли в памяти подряд без разделителей между ними?
    msg db "hello " 
        db "world"
    Ответ написан
    Комментировать
  • Можно ли передать в функцию-предикат значение как в лямбду?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как в этом случае заставить функцию GreatherThanN увидеть это самое N?

    Если функции нужен контекст, то вместо функции можно использовать функциональный объект -- объект класса с оператором ():

    class GreaterThanN {
        int N;
    public:
        GreaterThanN(int _N): N(_N)
        {
        }
        bool operator ()(int x) const
        {
            if (x > N)
                return true;
            return false;
        }
    };
    
    int N = 5;
    count_if(begin(v), end(v), GreatherThanN(N));
    Ответ написан
    3 комментария
  • Как решить проблему в Bash?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    if [ -s file.txt ]
    then
    echo "File is empty"

    Неправильный тест:
    -s FILE
                  FILE exists and has a size greater than zero


    Правильный тест на файл нулевого размера наверно будет выглядеть так:
    if [ -f file.txt -a ! -s file.txt ]

    Но тогда и дальнейшая логика в else посыплется, потому что ветка else будет теперь означать "нет файла, не обычный файл, или файл ненулевого размера".
    Ответ написан
  • Почему не соединиться с сервером?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я смотрю сюда, и сдаётся мне, что начало инициализации sockaddr_in в твоём коде должна выглядеть так:

    mov byte [sockaddr_in + 0], AF_INET ; sin_family
    mov byte [sockaddr_in + 2], 0 ; sin_port[0] это старший байт sin_port
    mov byte [sockaddr_in + 3], 80 ; sin_port[1] а это младший

    Т.е. перепутана endianness sin_family и sin_port. sin_addr вроде нормально выглядит.
    Ответ написан
    1 комментарий
  • Как задать значение переменной в SRAM при ее объявлении?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Фактически, по адресу 0x0060 лежит какой-то мусор, который никак не относится к тому, что я туда хотел положить.

    Откуда взялся адрес 0x0060 и как вы поняли что там лежит?

    TL;DR: код копирующий данные из FLASH в SRAM и обнуляющий .bss не линкуется по умолчанию. gcc вставляет ссылку на неопределённые символы __do_copy_data и __do_clear_bss в каждую единицу трансляции, в которой определяются объекты в секции .data и .bss соответственно. В написанных руками ассемблерных файлах их можно упомянуть явно.
    Ответ написан
  • Сколько будут занимать места параметры в данном случае?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    ума не приложу, почему размер void _stdcall foo(short a, short b); параметров равен 8

    Потому что аргументы размером меньше 4 байт расширяются до 4 байт. См.

    Как выяснилось, стек растет не только на 4 байта, а на 2.

    То, что в стек физически можно положить 2 байта (а можно ведь и 1, и 3 -- sub $imm, %esp) не означает, что это следует делать. См:
    The stack will always be maintained 16-byte aligned, except within
    the prolog (for example, after the return address is pushed), and except where
    indicated in Function Types for a certain class of frame functions
    Для венды на x86 я такого описания на том же сайте не нашёл, но точно выравнивание должно быть не меньше 4.
    Ответ написан
    Комментировать
  • Зачем нужно выравнивание памяти по слову?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Я не знаю, можно ли такого уровня детали найти для современных процессоров, а вот для i80386 в спецификации, в разделе 5.3.6 легко можно видеть, что невыравненный доступ к памяти занимает два цикла, вместо одного.
    За пределами мира x86 многие процессоры вообще не поддерживают доступ к невыравненным данным на аппаратном уровне.
    Ответ написан
    Комментировать
  • C++ что надо учить чтоб уметь создавать оконные програмы?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    что надо учить чтоб уметь создавать оконные програмы?

    Конечные автоматы. После этого -- немного многопоточности. После этого не составит труда разобраться и использовать любой GUI API.
    Ответ написан
    Комментировать
  • Wchar_t в параметрах функции main?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Почему не отобразился текст параметра? Тип же верен.

    Потому что недостаточно просто поменять тип параметра функции. Нужно ещё поменять то как она вызывается.
    В венде для этого есть другое имя для main -- wmain.
    Ответ написан
    5 комментариев
  • Как узнать длину числа в битах?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как это "длина числа в битах", что нужно делать чтобы ее определить.

    Это количество бит необходимых для записи числа.
    Нужно взять следующее бОльшее целое число после логарифма числа по основанию 2. Т.е. 1 -- 1 бит, 2 -- 2 бита, 3 -- 2 бита, 4 -- 3 бита... 1023 -- 10 битов, 1024 -- 11 битов... 179,769,313,486,231,590,772,930,...,304,835,356,329,624,224,137,215 (309 цифр) -- 1024 бита, 179,769,313,486,231,590,772,930,...,304,835,356,329,624,224,137,216 -- 1025 битов...
    Ответ написан
    2 комментария
  • Почему не открывается сокет для прослушивания?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Обёртка говорит, что все успешно, присваивается sockfd = 0,

    Это очень подозрительно, потому что 0 -- это обычно файловый дескриптор стандартного ввода.
    Ответ написан