Задать вопрос
  • Как сделать новое чтение из STDIN?

    includedlibrary
    @includedlibrary
    Могу ли я теперь как то сделать новый вызов read из stdin в новый кусок памяти?

    Да, точно так же, как и до этого.

    Как правильно закрыть старый?

    Что значит закрыть? Закрывают обычно файловые дескрипторы и сокеты, но после этого из них уже нельзя читать данные. После вызова read надо обработать ошибку, если она была, но закрывать ничего не нужно.
  • Необходима ли виртуальная страничная адресация в 4Гбайта при наличии ОЗУ емкостью 4Гбайта и почему?

    includedlibrary
    @includedlibrary
    15432, Да, я ещё забыл упомянуть про swap и про то, что отпадает необходимость думать, по какому адресу грузится программа, чтобы никакие две программы не пересекались.
    Написано
  • Покажите на ассемблере как выглядит защита от переполнения буфера?

    includedlibrary
    @includedlibrary
    Sasha_88, Магии там никакой нет - проверка, что индекс больше нуля и меньше размера массива, если она не проходит, то вызывается процедура, которая кидает исключение. Получается, что такая простая проверка защитит от переполнения буфера, потому что, чтобы его переполнить надо записать больше, чем он может вместить. В инструкциях ассемблера - это cmp, jcc и call.
    Написано
  • Покажите на ассемблере как выглядит защита от переполнения буфера?

    includedlibrary
    @includedlibrary
    Sasha_88, Ну так а при чём тут компилятор? at - это библиотечный метод, он не является частью компилятора. Его исходники можно посмотреть, достаточно скачать код стандартной библиотеки c++
    Написано
  • Покажите на ассемблере как выглядит защита от переполнения буфера?

    includedlibrary
    @includedlibrary
    Какой конкретно компилятор? В C/C++ компилятор никакие проверки за вас делать не будет. Компиляторы языков, у которых проверки прописаны в стандарте, реализуют их по-разному. Сначала идёт проверка, что индекс >= 0 и индекс < размера массива, если проверка не проходит, то дальше вызывается процедура, которая генерирует исключение или останавливает программу и выводит стектрейс или что-то ещё. Также в некоторых случах компиляторы не вставляют такие проверки, если при статическом анализе удалось подтвердить, что выхода за границы точно не будет.

    Upd: На самом деле, можно сказать gcc/clang, чтобы он добавлял различные проверки при работе с памятью, добавив флаг -fsanitize=address. Алгоритм работы описан тут https://github.com/google/sanitizers/wiki/AddressS...,
    Написано
  • Как корректно вывести функцию в байтовом виде?

    includedlibrary
    @includedlibrary
    Я не уверен, что можно сделать платформо и компиляторонезависимое решение. Я для своих нужд использовал таблицу символов в ELF файлах (в PE принцип тот же), которую генерирует GCC. Алгоритм был следующий:
    1. Добавляем в скрипт компоновщика символ для хэш-таблицы с именами и размерами функцмй пока что с размером равным нулю, в коде программы обращаемся к этой таблице, как-будто бы она уже заполнена (делаем поиск по имени функции, получаем по нему размер и далее делаем с размером то, что нам нужно).
    2. Компилируем программу.
    3. Пишем другую программу, которая будет смотреть полученный на предыдущем шаге ELF файл, доставать из таблицы символов функции и их размеры, заполнять хэш таблицу и записывать её в отдельный файл.
    4. Пишем новый скрипт компоновщика, в котором вместо символа с нулевым размером, создаём символ с тем же именем с размером и содержимым файла, полученным на предыдущем шаге
    5. Компилируем программу снова с использованием скрипта компоновщика, созданного на предыдущем шаге
    Написано
  • Как использовать строку в качестве названия функции в GoLang?

    includedlibrary
    @includedlibrary
    А что вы хотите сделать в итоге? Самый просто способ - сделать map[string]func() вместо func() подставьте нужную вам сигнатуру. Если у функций может быть разный набор аргументов, можно создать map[string]any, но тогда придётся делать приведение any к нужному типу, отчего весь смысл теряется:

    package main
    
    import "fmt"
    
    func read() {
    	fmt.Println("read")
    }
    
    func write() {
    	fmt.Println("write")
    }
    
    var funcs = map[string]func(){
    	"read":  read,
    	"write": write,
    }
    
    func main() {
    	funcs["read"]()
    	funcs["write"]()
    }
    Написано
  • Зачем нужен Wayland и что нужно чтобы нарисовать пиксель на экране?

    includedlibrary
    @includedlibrary
    Дмитрий, Вы правы. Неверно выразился. Я имел в виду, что в Wayland принято, что каждый менеджер окон реализует данный протокол и, соответственно, является сервером. В среде X11 (тут хоть и возможно более одной реализации, но почти все используют X.org) менеджер не является сервером, он является клиентом X сервера.
    Написано
  • Как скомпилировать win-iconv не имея опыта?

    includedlibrary
    @includedlibrary
    Простой Человек, В arch linux, очевидно нет windows.h, потому что это linux, а не windows. Будет ли проще через студию, я не знаю. Можете попробовать, там как раз есть CMakeLists.txt можно сгенерировать проект для студии
    Написано
  • Зачем нужен Wayland и что нужно чтобы нарисовать пиксель на экране?

    includedlibrary
    @includedlibrary
    Единственная проблема - ваша программа в таком случае не будет корректно работать на большинстве систем, потому что большинство пользователей работает либо под X11, либо под менеджером, который реализует Wayland
    Написано
  • Зачем нужен Wayland и что нужно чтобы нарисовать пиксель на экране?

    includedlibrary
    @includedlibrary
    что разработчикам FireFox не нужно тратить время на GTK и лучше сразу портировать браузер на Wayland.


    GTK - это библиотека для построения GUI, она уже портирована под wayland, соответсвенно, всё что её использует и не завязывается на X11 тоже должно работать под wayland. Firefox уже работает под wayland без использования xwayland, проверено лично.

    Допустим у нас нет GTK и я хочу отрисовать пиксель на экране. Что для этого нужно? Нужен ли для этого Wayland и кукую роль он будет играть?

    X11 - это сервер, который позволяет создавать окна и что-то отрисовывать. Wayland - это только протокол. Вы создаёте оконный менеджер, который обрабатывает запросы по протоколу Wayland, соответсвенно приложения должны эти запросы делать в соответствии с протоколом для создания окон и каких-либо ещё действий с ними. То есть в случае X11 есть одна реализация сервера, в случае с Wayland - тысячи их. Для отрисовки графики вам нужен драйвер видеокарты и программа, которая с ним взаимодействует. То есть вам не нужен ни Wayland, ни X11. Вы можете использовать EGL напрямую
    Написано
  • Как работает get запрос в https?

    includedlibrary
    @includedlibrary
    kedra90, Ну да. Сервер не может узнать, что вы с файлом сделали - скачали и сохранили, скачали и сразу отобразили без сохранения, или скачали и отбросили.
    Написано
  • Как работает get запрос в https?

    includedlibrary
    @includedlibrary
    kedra90, Пользователь запросил index.html. Сервер отдал ему index.html, используемые css и js файлы и картинки сразу, не дожидаясь, пока клиент их запросит
    Написано
  • Как работает get запрос в https?

    includedlibrary
    @includedlibrary
    kedra90, Не обязательно браузера. Но так да, HTTP - это запрос/ответ (хотя в HTTP/2 появилась возможность отдавать то, что ещё не было запрошено).
    Написано
  • Как работает get запрос в https?

    includedlibrary
    @includedlibrary
    с точки зрения сервера получается, что если пользователь смотрит или сохраняет к себе картинку (перетаскивая на пример к себе в папку на комп), то сервер не знает, что делает дальше с этой картинкой юзер? Правильно понимаю ?

    Да. Это очевидно, если подумать о возможности обратного - получается, что на компе/телефоне/умном чайнике/etc. должно стоять ПО, которое следит, что же такое пользователь делает с картинкой/другим файлом. При этом это ПО должно делиться всеми этими сведениями со всеми сайтами. Звучит трудозатратно и бессмысленно. А вообще RTFM
    Написано
  • Как скомпилировать win-iconv не имея опыта?

    includedlibrary
    @includedlibrary
    А запуск make не помогает? Если что, make и gcc под винду можно взять здесь https://github.com/skeeto/w64devkit/releases/
    Написано
  • Как вычисляется цвет пикселя во фрагментном шейдере?

    includedlibrary
    @includedlibrary
    Цикл for выполняется для каждого пикселя. Цета пикселей различаются, потому что есть зависимость цвета от координаты пикселя:

    // uv зависит от текущей координаты
    vec2 uv = (gl_FragCoord.xy - 0.5 * resolution.xy) / resolution.y;
    
    /* Этот цикл выполняется для каждого пикселя */
    for (float i = 0.0; i < 60.0; i += 1) {
        /* ... */
        col += 0.001 / length(uv - vec2(dx + 0.1, dy)); // Есть зависимость от uv, то есть от координаты
    }
    Написано
  • Как настроить CMake на установку пакетов?

    includedlibrary
    @includedlibrary
    Я не плюсовик, конечно, но через CMake обычно никто ничего не ставит. Обычно как раз пишут, мол, установи то-то и то-то, потом уже собирай. Мой опыт основывается только на сборке пакетов из исходников.
    Написано