All streams
Search
Write a publication
Pull to refresh
23
0
Александр @Readme

Средненький велосипедостроитель C++

Send message

Нет, компиляторами ничего не игнорируется просто так, inline сейчас имеет просто другой смысл (выше написали про линковку), и к встраиванию не имеет никакого отношения. По-хорошему просто так его писать не нужно, иначе можно случайно замаскировать multiple definition error, который обычно выстрелит на линковке.

Запрос Double Click в принципе довольно странен и может насторожить (да и кто читает инструкции к капче?). Проще сделать вид, что кнопка "залипла" и не нажимается, и подменять окна только после нескольких яростных кликов (да — лаунчеры, меняющие фокус, я смотрю на вас с презрением и негодованием).

Выполняется. В демо видно, что после нажатия "Start Here" фейковая кнопка не активна в течение некоторого таймера — в это время, вероятно, под видимым окном грузится страница атакуемого сайта. В описании атаки тоже это проговаривается (не совсем очевидно, правда).

В самой статье сильно не хватает описания инструментария, доступного ИИ (хоть вы и ответили в комментарии выше, почему бы сразу не приложить этот промт в самой статье для желающих повторить эксперимент). Если ИИ доступен execute_code, то простор для решений довольно большой, вплоть до полного слома хостовой системы эксплоитами и прописывания себя в UEFI, например.

если представить элементы поля не в виде чисел, а в виде кортежей

Тогда это уже будет не поле целых чисел, а поле таких "кортежей" (кажется, полностью идентичное полю рациональных чисел). Вопрос просто в определении: по определению поля, множество целых чисел не является полем, так как частное от деления целых чисел может не принадлежать множеству целых чисел.

А, ну да, позволит, а рарчик просто открывался :) В статье ещё описывается использование WebRTC по UDP, у него тоже нет аналога CORS-ограничений вроде как.

Ответ сложнее и интереснее, чем может показаться.

Во-первых, открывать голые TCP/UDP соединения браузер всё-таки не позволит (если только через расширения конкретного браузера).

Однако, http-запросы из JS куда угодно разрешены, НО! CORS не позволит прочитать ответ внутри JS, если в ответе нет явного заголовка Access-Control-Allow-Origin: XXX. Да, в wireshark очень чётко видны открывающиеся TCP-сессии, запросы от браузера и радостные ответы локальных сервисов. Тем не менее:

  • остаётся возможность атаки по стороннему каналу (например, замеряем время запроса к http://127.0.0.1:5432 — косвенно понимаем, работает Postgres у пользователя локально или нет);

  • банально, всё ещё можно отправить запросы вида PUT http://192.168.0.1/login?user=admin&password=admin&set_dns=99.99.99.99 (зависит от API слушающих сервисов) — ответ нам вообще не важен, мы просто в лоб передаём в запросе нужную информацию слушающему сервису. Именно такой вектор обмена информацией рассматривается в статье.

Для меня лично стало неприятным сюрпризом, что

  • даже в современных браузерах есть возможность напрямую из песочницы обращаться к локальной сети и выполнять такой жирным пласт запросов (пусть и чаще всего односторонних);

  • и что CORS всего навсего блокирует ответы, но не запросы (что логично, но требует осознания).

Кстати, эту стереопару вполне можно рассмотреть и в миниатюрном варианте из статьи) Ну и да, она, в отличие от остальных фото в статье, предназначена для метода параллельного взгляда, а не перекрёстного.

Немного дополню озвученные ответы: да, "сила" объёмности зависит от т.н. стереобазы, то есть расстояния между фотоприёмниками (зрачками, объективами стереокамеры/бинокля и пр.). С помощью изменения этого расстояния в VR-приложениях настраивается масштаб сцены относительно пользователя: например, по умолчанию в Google Earth VR мир кажется игрушечным, потому что расстояние между камерами рендеринга равно десяткам/сотням метров, но активация режима "Human Scale" выставляет стереобазу в единицы-десятки сантиметров, что сразу меняет масштаб мира.

Увы, слишком короткая стереобаза (~6 см, межзрачковое расстояние) хоть и должна верно передавать масштаб, но делает два отрендеренных изображения слишком слабо различающимися, что при недостаточном разрешении дисплеев приводит к проблеме "плоской" сцены без параллакса — как в старых игрушках, когда пейзажи запекались в текстуру и натягивались на плоскость.

просто рабочая реализация (https://godbolt.org/z/ff55c4YnP)

Почему-то прямо с порога некорректный ответ (clang-trunk -O0):

veca{0.000000, 1.000000}
vecb{1076475645313255735296.000000, 1.000000}
vecc{1.000000, 2.000000, 3.000000}
vecd{1.000000, 0.000000, 3.000000}

На -O1 и выше всё норм. UB таки стреляет?

Для интересующихся — отличный перевод статьи 2018 года на Хабре про эту же технику:
Иллюзия пространства: как новый Spiderman рендерит помещения без геометрии

Так аналитическое решение само по себе торт! Можно предельный переход сделать c → ∞ (спойлер: да, приходим к классическим формулам), можно g покрутить (чёрная дыра), или m занулить (нейтрино, фотон… ну тут конечно погорячился).

Прошу помощи зала: помнится, на Хабре было несколько похожих статей, где рассматривался вопрос поиска некоего алгоритма брутфорсом опкодов миниатюрной ВМ. Так вот, не могу найти статью, в которой рассказывалось, как искалась "программа", помещавшаяся в 64-битное число (внутри которого кодировались инструкции стековой машины в обратной польской нотации), собственно перебором всех 64-битных чисел. Может, кто-то помнит эту статью или хотя бы волшебные слова из неё?

Чиселка с деньгами — это чаще всего всё равно будет какой-нибудь uint64_t, хоть он внутри Integer внутри Object, хоть он внутри struct Wallet внутри struct MyCharacter. А значит, этот кусок памяти можно отыскать. Кроме того, состояние типа "money" обычно какое-то глобальное или по крайней мере не пересоздающееся постоянно, значит, сборщиком оно не разрушится (например, ссылка на "money" опосредованно должна быть у рендерера или у планировщика, пинающего рендерер).

Френдлифаер круто, ещё и стратегию меняет: по функции, названной противником, можно сделать предположения, куда он не хочет попасть сам.

Хороший разбор и примеры. Интересно, что материал неявно затрагивает ещё одну важную тему: SCEV Evaluation является прекрасным примером оптимизации, честно полагающейся на отсутствие UB (undefined behavior) в исходном коде. Мы применяем матаппарат на множестве целых чисел, чтобы вывести некоторые результирующие формулы, но они с большой вероятностью перестают работать, если допустить целочисленное переполнение на итерациях суммирования (однако, не исключено, что формулы справедливы в арифметике по модулю 2⁶⁴, например).

GetRelative(f.path().string(), path)

— не оторвётся ли случайно (или скорее наоборот останется) какой-нибудь слэш / в relative-пути, если передать path без завершающего слэша? Зависит, конечно, от того, как именно path доходит до сюда.


UPD: ну и в принципе смешивание std::string и fs::path для навигации звучит довольно взрывоопасно, вроде API fs должно хватать для всех GetRelative и т.д., но он ещё и нормализует пути.

Да, вот только не стоит забывать, что отсчёт у нас идёт от абсолютного нуля 0K (-273°C), поэтому радиатор 90°C излучает сильнее радиатора 20°C всего в ((273+90)÷(273+20))⁴ ~ 2.3 раза сильнее.

Не совсем так, для передачи энергии излучением достаточно просто разности температур и способности поглощать определённые длины волн. Все тела излучают (см. Закон Стефана — Больцмана), и примерно пропорционально ~T⁴, но другое дело, что входящие и исходящие потоки могут быть равны.


Но да, от проца до радиатора ПК больше тепла передаётся теплопроводностью, а от радиатора воздуху — конвекцией.

Information

Rating
Does not participate
Registered
Activity