Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

Сегодня ночью ShadPS4 присоединится к охоте — так начинается история ...

Дата публикации: 27-08-2026 08:00:26

Сегодня ночью ShadPS4 присоединится к охоте — так начинается история о том, как самый популярный эмулятор PlayStation 4 наконец позволил запустить Bloodborne на ПК. Но прежде чем радоваться, давайте заглянем под капот этого проекта. Я провёл разбор кода эмулятора (коммит 24e68ba main-ветки, без сторонних библиотек) и нашёл немало интересного — от безобидных мелочей до настоящих бомб замедленного действия. Всем контрибуторам ShadPS4 — огромная благодарность, но охота есть охота.
Первый фрагмент — «Fear your blindness». В файле input_handler.h обнаружился выход за границу буфера. Ошибка прожила в проекте полтора года, пока её случайно не исправили. Классический случай, когда глаз автора замылился при добавлении большой порции кода.
Второй фрагмент — «No mercy for “Liar”». В avplayer_source.cpp проверка условия всегда истинна, потому что беззнаковый тип сравнивается с нулём. Если копнуть глубже, видно, что раньше поле было знаковым, а после рефакторинга проверка стала тавтологией. Похоже на опечатку, которую скопипастили из одной функции в другую.
Третий фрагмент — «Let us cleanse these foul streets». В aio.cpp при вызове функции обнуления буфера передаётся sizeof(выражение), которое возвращает размер указателя (4 или 8 байт), а не размер всего массива. В итоге обнуляется только часть. Скорее всего, хотели очистить весь буфер целиком.
Четвёртый фрагмент — «Beware of “Attack from behind”». Макрос логирования разыменовывает указатель до проверки на nullptr. В release-сборке вызов происходит, а проверка — уже внутри. Разработчик добавил код после макроса, но не заметил, что безусловное разыменование может упасть.
Пятый фрагмент — «Oh, Yourself, please, carry on in my stead». В text_editor.cpp переменной дважды присваивается одно и то же значение. Похоже на копипасту декларатора с инициализатором из соседней строки. Возможно, хотели присвоить что-то другое, но логика алгоритма этого не подтверждает.
Шестой фрагмент — «Treat “The unseen” with care». В liverpool_to_vk.cpp из-за приоритета операций выражение интерпретируется не так, как задумано. Ошибки нет, но код хрупкий — будущий разработчик может легко оступиться.
Седьмой фрагмент — «“Strong foe” waits ahead but “don’t give up”». В decoder.cpp в функцию декодирования инструкций передают размер указателя вместо размера буфера. Это похоже на реальную ошибку: похожий код нашли и выпилили ещё в 2023 году, а в другом эмуляторе PS4 использовали корректное значение 15.
Восьмой фрагмент — «Despicable “Metamorphosis” therefore fear “Moon”». В playgo.cpp сдвиг на 32 и более бита для 32-битного числа вызывает неопределённое поведение. При этом значения, приходящие из игр, часто меньше 32, например, японский язык — это 0. Так что любая японская игра гарантированно вызовет переполнение.
Девятый фрагмент — «Time for “Hidden path”». В hull_shader_transform.cpp пропущен оператор break в switch. Похоже, что разработчик намеренно игнорировал один случай, но не оставил комментария, и теперь поведение непредсказуемо.
Десятый фрагмент — «Treat “Lever” with care or you must accept “Ignoring”». В np_common.cpp сравнение строк всегда возвращает ложь, потому что используется беззнаковый тип, который не может быть меньше нуля. Опечатка в типе.
Одиннадцатый фрагмент — «The sky and the cosmos are one». В форке эмулятора, заточенного под Bloodborne, условие проверки дельты времени содержит лишнюю часть. В upstream есть похожий фрагмент с защитой от пролагов, но здесь она реализована некорректно.
Это лишь часть найденного. Код эмулятора — живой и активно развивающийся, но такие ошибки напоминают: даже самые талантливые разработчики иногда спотыкаются. Статический анализ помогает охотиться на эти баги до того, как они выстрелят в пользователей.
А как вы считаете, стоит ли доверять эмуляторам для игры в эксклюзивы, или лучше приобрести оригинальную консоль? Поделитесь своим мнением в комментариях!

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Запуск Verilog на микроконтроллере CH32V003 (ядро RISC-V) ( Аппаратная эмуляция ...010.7624-08-2026
2Мой код терял бы 230 байт из 231. Чтобы это увидеть, пришлось патчить QEMU-110.6302-08-2026
3Эмулятор PlayStation 5 научился запускать 3D-игры Разработчики KytyPS5 сообщили, что ...5713-07-2026
4Sony seemingly enforcing "stricter guidelines" on PlayStation Store to remove the mounds of PS5 shovelware games accumulating there0524-06-2026
5PlayStation Plus Extra/Premium Games For August 2026 Includes Helldivers 2012.6212-08-2026
6Move‑семантика в C++: пять задач, в которых легко ошибиться08.6223-06-2026
7Новая статья: Gamesblender 788: шейхи купили EA, реклама на PlayStation, ...08.5709-08-2026
8Почему страх в старых играх работал?012.3226-07-2026
9[Перевод] Проектируем с нуля калькулятор на FPGA. Часть 9: погоня за последним разрядом011.2624-07-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 9. Тональность: -1. Информативность: 8.85. Источник: vk.com.