Задать вопрос
  • В чём различие между FASM и FASM G?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    https://flatassembler.net/docs.php?article=fasmg говорит нам:
    What is flat assembler g?
    It is an assembly engine designed as a successor of the one used in flat assembler 1, one of the recognized assemblers for x86 processors. This is a bare engine that by itself has no ability to recognize and encode instructions of any processor, however it has an ability to become an assembler for any CPU architecture. It has a macroinstruction language that is substantially improved compared to the one provided by flat assembler 1 and it allows to easily implement instruction encoders in form of customizable macroinstructions. This approach has a great flexibility at the cost of performance.

    Т.е. fasm g -- это ассемблерный движок, нацеленный на то, чтобы стать ассемблером для любой архитектуры за счёт использования встроенного языка обработки макросов.
    Т.е. как будто бы ответы на твои вопросы -- "не зависит", "отдельный", "предназначен для того же и большего".
    Ответ написан
    Комментировать
  • Где хранится пароль от git clone https://user:pass@server?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Подскажите пожалуйста, где git хранит логин и пароль от данного url клонирования?

    Так прямо в remote и хранит. Набери git remote -v и полюбуйся. Или загляни в .git/config.
    Ответ написан
    Комментировать
  • Аналог среза в C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Пробовал написать собственную функцию срез(без успеха)

    Покажи, где проблема возникла.

    Есть какие либо варианты

    Вариант для С++ -- диапазон между итераторами, работает с любыми контейнерами.
    Ответ написан
    Комментировать
  • Как запустить на Linux 64 bit программы 32 bit, пишет что запускаемые файла это пустое место?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Доустановить 32-битное окружение -- libc и всё остальное, что программа использует. Детали зависят от дистрибутива.
    Пример для debian:
    dpkg --add-architecture i386
    apt-get update
    apt-get install libc6:i386
    Ответ написан
    1 комментарий
  • Будет ли считаться расизмом добавление настроек в игру, которые позволяют отключать персонажей некоторой расы?

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

    Нет.
    Расизмом будет предоставление разных возможностей игрокам разных рас.
    Ответ написан
    3 комментария
  • Как скриптом в Linux синхронизировать время с указанием своего Часового пояса?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как скриптом в Linux синхронизировать время с указанием своего Часового пояса?

    Никак же, внутреннее время в Linux -- всегда в UTC. Для синхронизации часов TZ не нужна.
    TZ -- это обычная переменная окружения, влияет она только на С-функции работающие с датой/временем и на одной машине разные сессии вполне могут иметь разные настройки TZ.
    Установить её для ash можно в /etc/profile или ~/.profile.
    Ответ написан
    5 комментариев
  • Почему переменная раскрывается с кавычками либо пытается сразу передать файлы?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    она ничего не находит, так как вторая переменная раскрывается с одинарными кавычками '.pdf'

    А у меня всё что надо находит твоим скриптом. Можешь добавить -x к #!/bin/bash чтобы шелл писал, что собирается выполнять, чтобы понять в чём дело. Подозреваю, что какие-нибудь смешные опции в .bashrc/.bash_profile
    Ответ написан
  • Почему у PostgreSQL и MySQL точность даты только до микросекунд?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что мешает MSSQL поддерживать точность даты до наносекунд

    То что в винде все встроенные таймстемпы имеют точность 100нс. Потому что формат данных FILETIME -- это целое число сотен наносекунд прошедших с начала 1601 года.
    Ответ написан
    1 комментарий
  • Почему не работает ALT-CTRL-Fx?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Захожу в консоль по SSH через Putty. Хочу переключиться к примеру на TTY2. Нажимаю CTRL+ALT+F2, но в консоли только [12~
    Что я делаю не так?

    ctrl-alt-f2 -- это сочетание клавиш для драйвера виртуального терминала. Соответственно, оно работает только при вводе через виртуальный терминал.

    Под простым юзером ввожу chvt 2:
    Если под рутом, то команда выполняется и всё
    Что я делаю не так?

    В графической консоли вводишь? С помощью strace легко понять что происходит:
    от простого юзера:
    $ strace -iv chvt 2
    ...
    [00007f96b99d56f0] open("/proc/self/fd/0", O_RDWR) = 3
    [00007f96b99da80a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f96b99db017] ioctl(3, KDGKBTYPE, 0x7fff06db6d67) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f96b99d5f30] close(3)             = 0
    [00007f96b99d56f0] open("/dev/tty", O_RDWR) = 3
    [00007f96b99da80a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f96b99db017] ioctl(3, KDGKBTYPE, 0x7fff06db6d67) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f96b99d5f30] close(3)             = 0
    [00007f96b99d56f0] open("/dev/tty0", O_RDWR) = -1 EACCES (Permission denied)
    ...

    Т..е. stdin и /dev/tty не поддерживают ioctl переключающий терминал (вернее, до него даже не доходит), потому что твоя консоль -- это псевдотерминал, а открыть /dev/tty0 не хватает привилегий.
    А от рута:
    $ sudo strace chvt 2
    ...
    [00007f591848c6f0] open("/proc/self/fd/0", O_RDWR) = 3
    [00007f591849180a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f5918492017] ioctl(3, KDGKBTYPE, 0x7fffe5e72d17) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f591848cf30] close(3)             = 0
    [00007f591848c6f0] open("/dev/tty", O_RDWR) = 3
    [00007f591849180a] ioctl(3, TCGETS, {c_iflags=0x5500, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f5918492017] ioctl(3, KDGKBTYPE, 0x7fffe5e72d17) = -1 ENOTTY (Inappropriate ioctl for device)
    [00007f591848cf30] close(3)             = 0
    [00007f591848c6f0] open("/dev/tty0", O_RDWR) = 3
    [00007f591849180a] ioctl(3, TCGETS, {c_iflags=0x5, c_oflags=0, c_cflags=0xbf, c_lflags=0, c_line=0, c_cc[VMIN]=1, c_cc[VTIME]=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"}) = 0
    [00007f5918492017] ioctl(3, KDGKBTYPE, 0x7fffe5e72d17) = 0
    [00007f5918492017] ioctl(3, VT_ACTIVATE, 0x2) = 0
    [00007f5918492017] ioctl(3, VT_WAITACTIVE, 0x2) = 0
    ...

    Т.е. stdin и /dev/tty -- то же самое, но /dev/tty0 открывается и ioctl VT_ACTIVATE проходит.
    Ответ написан
    Комментировать
  • Как низкоуровневый код использующий стек узнает откуда он начинается?

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

    Если мы говорим про обычные (не PIE) исполняемые ELF-файлы, то они слинкованы под конкретный адрес куда они будут загружены, и все адреса внутри одного исполняемого файла посчитаны заранее. Поэтому загрузка адреса функции или пременной в секции данных -- это просто загрузка константы в регистр.

    и кучи

    С кучей всё по-другому, потому что куча и объекты в ней полностью динамические. Выделение памяти для кучи -- это всегда системный вызов, который возвращает адрес выделенной памяти (и sbrk, и mmap).

    не ясно, как становится известен адрес стека и аргументов командной строки

    они инициализируются ядром ОС, согласно ABI, см. например, ABI x86_64, раздел 3.4.1.
    Ответ написан
    Комментировать
  • Как число с плавающей точкой преобразовать в half float в 16 формат?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как можно уместить 1.7754 в 3f 1a?

    0x3f 0x1a -- это знак == 0, порядок == 0xf, мантисса == 0x31a. Нормализованное значение мантиссы == 1 + 0x31a / 1024 = 1.7754. Порядок 0xf после вычитания bias == 15 превращается в 0, что соответствует множителю 1. Всё.

    Как число с плавающей точкой преобразовать в half float в 16 формат

    Примерно так:
    0) обработать специальные случаи (например 0 представляется как 0).
    1) взять модуль, запомнить знак исходного числа.
    2) нормализовать, т.е выделить множитель вида 2^N, чтобы осталась нормализованная мантисса в диапазоне [1, 2). К N прибавить 15 -- это значение порядка.
    3) отнять 1 от нормализованной мантиссы, результат умножить на 1024 -- это значение мантиссы float16.
    4) сдвинуть значение порядка влево на 10, сделать побитовое или с мантиссой float16, установить старший бит, если число было отрицательным.

    Для -3.4805 получаем:
    3.4805 = 2^1 * 1.7402 ; N = 1, M = 1024 * 0.7402 = 0x2f6 ;
    0x8000 | ((1 + 15) << 10) | 0x2f6 = 0x8000 | 0x4000 | 0x2f6 = 0xc2f6
    Ответ написан
    1 комментарий
  • Как отсортировать элементы структуры?

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

    if (miderate[i] > miderate[i + 1]) {
            swap (records[i].name, records[i + 1].name);
            swap (records[i].group, records[i + 1].group);
            swap(records[i].marks, records[i + 1].marks);
          }

    В том что ты сравниваешь средние оценки, но не переставляешь их.

    И к тому же, можно писать просто swap(records[i], records[i + 1]).
    И к тому же, можно сортировать с помощью std::sort
    Ответ написан
    3 комментария
  • Как найти и заменить текст на удаленном компьютере, Mac OS Mojave?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    sed -i

    -i не описана в POSIX, а значит может работать по-разному в разных системах.

    sed -i.random-backup-tag 's/OldText/NewText/g' должно помочь. Потом бэкапы удалишь командой
    find  Users/Desktop/Documents \
        -type d -name .git -prune -o 
        -type f -name '*.random-backup-tag' -print0 | \
        xargs -0 rm -f
    Ответ написан
    1 комментарий
  • Как реализовать асинхронный прием сокетов в C#?

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

    После того как соединение установлено сокеты на его концах абсолютно равноправны. Нет различия между клиентом и сервером. Делай сервер так, как делал бы клиента. Простейший вариант -- рождать отдельный поток для каждого соединения и делать в нём всё синхронно.
    Ответ написан
    Комментировать
  • Как строка Сишного кода будет выглядеть на c++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Так как str это string, то не могу использовать sscanf_s.

    Можешь: sscanf_s(str.c_str(), "%i %i", &inkey, &ininf);
    Ответ написан
    Комментировать
  • Что нужно исправить в этом коде, чтобы из глаз не шла кровь?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Что тут можно улучшить?

    std::string::insert вместо побуквенного перекладывания.
    newStr[i]+1 не работает для 'Я'->'А' и вообще сильно от кодировки зависит.
    Ответ написан
    Комментировать
  • Как вывести список файлов командой FIND?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    $find /var/www/test -type f ! -regex ".*\(edit\|200x200\).*" -name "*.jpg" -o -name "*.png"

    Операции в строке условий find имеют приоритеты, приоритет "или" ниже чем приоритет "и". У вас получилось "(тип -- файл, и не *edit* или *200x200*, и *.jpg) или *.png".

    Как быть?

    Добавить скобок:
    find /var/www/test -type f ! -regex ".*\(edit\|200x200\).*" \( -name "*.jpg" -o -name "*.png" \)


    Если не использовать регулярное выражение, то работает:
    $find /var/www/test -type f ! -name "*.jpg" -o -name "*.png"

    ...но совсем не так, как должно.
    Ответ написан
    Комментировать
  • Как перевести этот код с C++?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как перевести этот код с C++?

    И, главное, зачем? И чем для этой цели не подошёл компилятор С++?

    mov ebx, [ebp - 8]

    Нифига не mov, должно быть lea ebx, [ebp - 8]

    lea edx, [ebx + ecx + 4] ; add FirstThunk RVA to base. Offset &function is 4

    Нифига +4 не нужно. Смещение &function == 0.

    lea edx, [edx + 20] ;size of IMAGE_THUNK_DATA

    Нифига не +20, размер этой структуры -- 4.
    Ответ написан
    3 комментария
  • Как называется алгоритм??

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Как называется алгоритм??

    Быстрое возведение a в степень b. По модулю m.
    Ответ написан
    Комментировать
  • Как сравнить два числа в коде Грея?

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