Русский
Русский
English
Статистика
Реклама

Расследования

Почему провалился Cyberpunk 2077 и как плохое отношение к сотрудникам уничтожает продукты

22.01.2021 20:15:37 | Автор: admin


Могло ли быть так, что игра десятилетия (во всех смыслах) Cyberpunk 2077 выйдет в срок или хотя бы продемонстрирует менее печальную картину на консолях после стольких переносов?

Нет.

Оставаясь талантливыми художниками игрового ремесла, сотрудники студии CD Project Red уже давно поднаторели в раздувании пиара и продаже игр, которые еще только предстоит создать. Более того студия регулярно наступает на одни и те же грабли, и ждать иного в этот раз просто не стоило.

Давайте при помощи гугла и архивов игровых СМИ перенесемся в прошлое и узнаем почему.

Что было в самом начале?


Студии CD Project Red не в первой проваливать выпуск своих игр на консолях. Но именно консоли всегда были лакомым кусочком для студии, с каждым релизом новой игры, студия стремилась захватить все больший рынок.

29 ноября 2008 года в Интернет было загружено видео, посвященное консольной версии игры первой части игры Ведьмак, которая изначально вышла только на ПК. 2 декабря CD Projekt Red официально подтвердила, что The Witcher будет перенесен французской фирмой Widescreen Games на консоли PlayStation 3 и Xbox 360 и выпущен как The Witcher: Rise of the White Wolf. был запланирован новый движок и множество улучшений оригинальной игры.

29 апреля 2009 года было объявлено, что производство игры было остановлено из-за просроченных платежей от CD Projekt в адрес французских разработчиков консольной версии. В сообщении генерального директора CD Projekt Михала Кичински говорилось, что платежи задерживаются из-за того, что игры Widescreen не соблюдают сроки разработки, а также что техническая неспособность реализовать задуманное создает риск потери запланированного качества и что CD Projekt прекратили сотрудничество с этой компанией.

Следующая часть игры The Witcher 2: Assassins of Kings, кроме ПК, вышла только на одной консоли Xbox 360. Однако, амбиции студии постоянно расли и релиз третьей части Ведьмака был запланирован уже на двух консолях PS4, Xbox One. Что впоследствии сыграет с ними злую шутку в виде задержек с выходом третьей части.

2013- 2015 годы


3 октября 2014 в сообщении на игровом форуме NeoGAF один анонимный пользователь под ником Anaxymenes не согласился с тем, что другие хвалят еще не вышедший Ведьмак 3, утверждая, что разработчик CD Projekt Red искусственно нагнетает впечатления о грядущей игре. Затем он похвастался некими инсайдерскими знаниями и предостерег от предварительного заказа игры, особенно на консолях. После того, как правдивость таких тенденциозных заявлений была подвергнута сомнению другими участниками форума, администратор форума NeoGAF сообщил, что Anaxymenes смог приватным образом предоставить некое подтверждение своим словам и статусу инсайдера.

В частности Anaxymenes сказал:

Чушь с Ведьмаком 3 началась с первого дня. PR создает раздутое видение игры, которой не существует, а команда уже больше года находится в безумном кранче.

Слово кранч пришло в русский язык от английского слова crunch хруст, треск, скрип, в разговорном варианте кризис, дефицит чего либо. Кранчем называют аврал: рабочую ситуацию, в которой сотрудникам приходится работать в день больше часов, чем они должны по трудовому договору для успешного выполнения срочных задач в срок. Как правило кранч это затяжной кризис, который может длится даже несколько месяцев. Сотрудники могут приходить на работу в 10 утра, а уходить за полночь на протяжении недель.

В игровой индустрии нет единого определения кранча, но по общепринятому мнению кранч включает в себя два компонента: обязательную сверхурочную работу и культуру, которая заставляет сотрудников работать дольше или усерднее, чем предусмотрено в основном трудовом соглашении.

Эти форумные сплетни сейчас [в 2021] никто бы и не вспомнил, если бы тогда в ответ на них не сделал заявление руководитель студии по связям с общественностью Михал Платков-Гилевски.

Мы не комментируем слухи, особенно когда кто-то высказывается анонимно, ведь это всего лишь его или ее слово против нашего, сообщил он порталу GameSpot, и заявил, что видео-демонстрации игры говорят сами за себя, Если у вас есть какие-либо сомнения в качестве Wild Hunt, посмотрите 35-минутное игровое видео, которое мы опубликовали некоторое время назад, или проверьте реакцию игроков на наши публичные превью на Gamescom, Сан-Диего. Comic Con и E3 и решайте сами.

При этом представители студии проигнорировали вопрос GameSpot о правдивости предположений о масштабной практике кранчей в CDP.

В марте 2014 CD Projekt Red перенесла дату выхода The Witcher 3 дата выхода февраль 2015.

В то время студия написала:
Мы могли бы выпустили игру к концу этого [2014] года, как мы первоначально планировали. Все же мы пришли к выводу, что несколько дополнительных месяцев позволят нам достичь того качества, которое удовлетворит нас, того качества, которого геймеры ожидают от нас.

Переносы и слухи про кранчи, в 2021 году это звучит до боли знакомо

Игра Ведьмак 3 была анонсирована в 2013 году, и у должна была выйти уже в следующем году на трех платформах ПК, PlayStation 4 и Xbox One. Дата выпуска была позже перенесена с третьего квартала 2014 года на февраль 2015 года. После пропуска запланированной даты выпуска 24 февраля, Ведьмак 3: все таки был был выпущен во всем мире 19 мая 2015 года.

2017 год


Ведьмак 3 вышел 2 года назад и разошелся тиражом почти в 30 миллионов копий. Киберпанк 2077 находится в разработке уже около 5 лет, с 2012 года, и его релиз запланирован не только на ПК и всех консолях актуального поколения (c несколькими разными аппаратными ревизиями и разной производительностью), но и только готовящихся к релизу некст-генах PlayStation 5 и Xbox Series X/S

Несмотря на то, что студия CD Project Red по-прежнему (или вновь) окутана романтическим флером финансовой успешности и изменчивого духа инди-разработки, в игровой прессе вспыхивает новый скандал. На сайте отзывов о работодателях Glassdoor всплывает множество весьма критичных высказываний бывших сотрудников CDPR. Негативные появились в период с 2015 по 2017, появлялись и позже.

Вот фрагмент отзыва за 2015 год:

Управление никудышное, нет никого, кто действительно мог бы управлять людьми. Оно состоит из старых сотрудников, которые работают в компании, потому что они вложили свое время [и оказались здесь раньше всех].

Разработчики часто бывают молодыми и неопытными. Оба фактора вместе обеспечивают абсурдный объем кранчинга. Для некоторых периоды кранчинга длились более ДВУХ лет. Конечно, взять выходные дни было практически невозможно.

При этом даже лучшим сотрудникам может быть отказано в повышении на основании надуманных соображений, а других могут повысить, несмотря на несоблюдение требований. Это делает систему карьерного роста бессмысленной, поскольку ее можно обмануть без каких-либо последствий.

Удержание сотрудников ужасно. Считается, что любой сотрудник, недовольный своим положением в компании, должен немедленно подать заявление на увольнение, и никаких усилий для его удержания не предпринимается. Такая практика приводит к появлению большого количества непрофессиональных новичков в во всех отделах.

А вот лишь часть заголовков отзывов за 2017 год







Просто почитайте эти отзывы сами

В какой-то момент волна негатива и перемывания костей среди геймерской аудитории достигла такого уровня, что CD Projekt Red решили вмешаться. Соучредитель Марчин Ивински и менеджер студии Адам Бадовски выступили с заявлением относительно морального духа в студии.

Полный текст заявления
image


Обычно мы избегаем комментировать обзоры компаний в таких местах, как Glassdoor, но на этот раз особенно в свете того факта, что мы долгое время ничего не рассказывали о Cyberpunk 2077 и видели, как некоторые геймеры забеспокоились о проекте мы хотел бы уточнить несколько моментов.

Звучит тезис такой подход к созданию игр не для всех, как бы говорит критикам: Вы ничего не понимаете, это не то, это другое!

В 2015 году, когда мы выпустили Ведьмак 3: Дикая Охота , у нас было более 200 разработчиков, и это была основная команда студии. С тех пор мы почти удвоили штат сотрудников, и мы продолжаем нанимать. Тогда у команды было просто мало разработчиков, а вот теперь то CDPR удвоит их количество, что должно, подобно волшебной пилюле, решить все проблемы.

Cyberpunk 2077 развивается по плану, но мы не торопимся в этом случае тишина это цена создания отличной игры.

Все хорошо, прекрасная маркиза!

2019 год


В мае 2019 в интервью Kotaku Марцин Ивински заявил, что студия хочет использовать более гуманный подход к поздней стадии разработки, в большей степени опираясь на необязательную политику кранчей.

Мы четко сообщаем людям, что, конечно, есть определенные моменты, когда нам нужно работать усерднее например, я думаю, что демо [2018] E3 является довольно хорошим примером, но мы хотим быть более гуманными и относиться к людям с уважением. Если им нужно взять перерыв, они смогут взять перерыв. Никто не будет за это подвергнут осуждению, если об этом попросят
сказал Ивински.

Заметьте, CD Projekt не говорит о полном устранении кранчей, что было бы более разумным обязательством. И заявление о том, что сотрудники смогут взять отпуск, если им это нужно, не обязательно соответствует действительности в сложной среде коллектива разработчики вполне могут чувствовать скрытое давление, вынуждающее их продолжать работать, например, чтобы поддержать своих товарищей по команде или сохранить свое собственное положение в компании.

2020 год


9 октября Джейсон Шрайер, журналист блумберга опубликовал в Твиттере электронное письмо, в котором глава студии CDPR, Адам бадовски, извинился перед партнерами разработчиков за сверхурочную работу



Шрайер отмечат, что хотя в самой культуре кранчинга нет ничего страшного или преступного, странно, что компания, которая практикует кранчинг в таких огромных масштабах, старательно делает вид, что такой практики и вовсе не существует.

27 октября 2020 бывшая временная сотрудница студии под ником outstarwalker написала серию твитов о низкой оплате труда во время своего участия в разработке Ведьмака 3.



Итак, могу ли я теперь поделиться тем, что я зарабатывала 430 долларов в месяц за работу над лицевыми анимациями над Великой игрой 3 в той великой компании, которая полноценно вознаграждает своих пассионарно кранчащих сотрудников?

Если вы сейчас читаете, потому что сайты и форумы процитировали меня: это не новость. Так было и в 2014 году. Я не первая, кто поднимает данную тему. На протяжении многих лет это является данностью для польской игровой индустрии. У меня, как у фаната своего дела, не хватало смелости поговорить об этом раньше.

Личность outstarwalker подтвердили модераторы форума Reddit. Они добавили её сообщения в общее обсуждение переработок в CD Projekt RED. Девушка, кстати, ведёт свой YouTube-канал и в одном из роликов рассказала, почему покинула польскую студию.

В тоже время за 2020 год релиз Cyberpunk 2077, находящегося в разработке семь лет, суммарно откладывался трижды! Изначально, на
выставке E3 2019 релиз был назначен на апрель 2020 года. В январе 2020 релиз был перенесен на сентябрь 2020 года. В сентябре игра была перенесена на 19 ноября 2020 года.

В начале октября 2020 года CD Projekt Red объявила, что игра стала золотой. Этот термин означает, что игра была готова к началу прохождения сертификации для консолей, а также к запуску процесса печати дисков, которые затем должны успеть поступить в розничные магазины к дате объявленного релиза. Тем не менее, разработка игры была в самом разгаре даже после отправки дисков в печать. С некоторых пор в игровой индустрии продолжение работу над игрой после получения золотого статуса стало обычной практикой для последующего выпуска патча нулевого дня, который исправит любые обнаруженные ошибки в последнюю минуту.

Но студия CDPR вывела эту практику на новый уровень. CD Projekt Red призналась, что завершение патча нулевого дня заняло больше времени, чем ожидалось, что потребовало третьего переноса релиза на 10 декабря 2020 для еще одного короткого 21-дневного рывка кранчинга.
Не смотря на все задержки и патч нулевого дня на консолях прошлого поколения игра оказалась практически неиграбельной, а на консолях нового поколения не был задействован обещанный потенциал графической подсистемы, что вызвало бурю негодования фанатов и серьезные последствия для студии в виде нескольких судебных исков.

2021 год


На в январе генеральный директор CD Projekt SA Марцин Ивински публично принес раскаяние в провальном выпуске видеоигры Cyberpunk 2077 в декабре 2020. Он взял на себя личную ответственность и попросил фанатов не винить команду.

В мрачном пятиминутном видеообращении и сопроводительном сообщении в блоге Ивински признал, что игра не соответствовала стандартам качества, которые мы хотели соблюдать. Мне и всему руководству очень жаль.



Постмортем


Любой изучивший ретроспективу студии Project RED и ее материнской компании поймет, что иначе и быть не могло.

Ошибки в планировании релизов и масштабировании сил разработчиков студии, а также постоянное желание откусить больше, чем можно прожевать, преследовали студию на протяжении последних 10 лет.

Cyberpunk 2077 начинали разрабатывать в эпоху доминирования старых консолей, а к моменту окончания разработки переориентировались на новые, но не отказались от поддержки старых.
В случае незапланированного роста системных требований пользователям компьютера всегда можно посоветовать обновить Dicrect X, драйвера видеокарты да и саму видеокарту. Но с владельцем консоли этот номер не пройдет, ее внутренности апгрейду не подлежат. Если поддержка определенной приставки заявлена разработчиком, игра должна демонстрировать комфортный уровень производительности без каких либо ухищрений со стороны.
CD Project RED намеревалась выпустить игру, не считая ПК, еще одновременно на ДЕВЯТИ разных конфигурациях консолей, некоторые из которых уже обладали недостаточной производительностью для ААА игр в 2020, а некоторые явно избыточной.

На этот раз польская студия попыталась кранчнуть орех, который был ей явно не по зубам.

Подробнее..

Почему провалился запуск Cyberpunk 2077 и как плохое отношение к сотрудникам сказывается на продуктах

22.01.2021 22:04:25 | Автор: admin


Могло ли быть так, что игра десятилетия (во всех смыслах) Cyberpunk 2077 выйдет в срок или хотя бы продемонстрирует менее печальную картину на консолях после стольких переносов?

Нет.

Оставаясь талантливыми художниками игрового ремесла, сотрудники студии CD Project Red уже давно поднаторели в раздувании пиара и продаже игр, которые еще только предстоит создать. Более того студия регулярно наступает на одни и те же грабли, и ждать иного в этот раз просто не стоило.

Давайте при помощи гугла и архивов игровых СМИ перенесемся в прошлое и узнаем почему.

Что было в самом начале?


Студии CD Project Red не в первой проваливать выпуск своих игр на консолях. Но именно консоли всегда были лакомым кусочком для студии, с каждым релизом новой игры, студия стремилась захватить все больший рынок.

29 ноября 2008 года в Интернет было загружено видео, посвященное консольной версии игры первой части игры Ведьмак, которая изначально вышла только на ПК. 2 декабря CD Projekt Red официально подтвердила, что The Witcher будет перенесен французской фирмой Widescreen Games на консоли PlayStation 3 и Xbox 360 и выпущен как The Witcher: Rise of the White Wolf. был запланирован новый движок и множество улучшений оригинальной игры.

29 апреля 2009 года было объявлено, что производство игры было остановлено из-за просроченных платежей от CD Projekt в адрес французских разработчиков консольной версии. В сообщении генерального директора CD Projekt Михала Кичински говорилось, что платежи задерживаются из-за того, что игры Widescreen не соблюдают сроки разработки, а также что техническая неспособность реализовать задуманное создает риск потери запланированного качества и что CD Projekt прекратили сотрудничество с этой компанией.

Следующая часть игры The Witcher 2: Assassins of Kings, кроме ПК, вышла только на одной консоли Xbox 360. Однако, амбиции студии постоянно расли и релиз третьей части Ведьмака был запланирован уже на двух консолях PS4, Xbox One. Что впоследствии сыграет с ними злую шутку в виде задержек с выходом третьей части.

2013- 2015 годы


3 октября 2014 в сообщении на игровом форуме NeoGAF один анонимный пользователь под ником Anaxymenes не согласился с тем, что другие хвалят еще не вышедший Ведьмак 3, утверждая, что разработчик CD Projekt Red искусственно нагнетает впечатления о грядущей игре. Затем он похвастался некими инсайдерскими знаниями и предостерег от предварительного заказа игры, особенно на консолях. После того, как правдивость таких тенденциозных заявлений была подвергнута сомнению другими участниками форума, администратор форума NeoGAF сообщил, что Anaxymenes смог приватным образом предоставить некое подтверждение своим словам и статусу инсайдера.

В частности Anaxymenes сказал:

Чушь с Ведьмаком 3 началась с первого дня. PR создает раздутое видение игры, которой не существует, а команда уже больше года находится в безумном кранче.

Слово кранч пришло в русский язык от английского слова crunch хруст, треск, скрип, в разговорном варианте кризис, дефицит чего либо. Кранчем называют аврал: рабочую ситуацию, в которой сотрудникам приходится работать в день больше часов, чем они должны по трудовому договору для успешного выполнения срочных задач в срок. Как правило кранч это затяжной кризис, который может длится даже несколько месяцев. Сотрудники могут приходить на работу в 10 утра, а уходить за полночь на протяжении недель.

В игровой индустрии нет единого определения кранча, но по общепринятому мнению кранч включает в себя два компонента: обязательную сверхурочную работу и культуру, которая заставляет сотрудников работать дольше или усерднее, чем предусмотрено в основном трудовом соглашении.

Эти форумные сплетни сейчас [в 2021] никто бы и не вспомнил, если бы тогда в ответ на них не сделал заявление руководитель студии по связям с общественностью Михал Платков-Гилевски.

Мы не комментируем слухи, особенно когда кто-то высказывается анонимно, ведь это всего лишь его или ее слово против нашего, сообщил он порталу GameSpot, и заявил, что видео-демонстрации игры говорят сами за себя, Если у вас есть какие-либо сомнения в качестве Wild Hunt, посмотрите 35-минутное игровое видео, которое мы опубликовали некоторое время назад, или проверьте реакцию игроков на наши публичные превью на Gamescom, Сан-Диего. Comic Con и E3 и решайте сами.

При этом представители студии проигнорировали вопрос GameSpot о правдивости предположений о масштабной практике кранчей в CDP.

В марте 2014 CD Projekt Red перенесла дату выхода The Witcher 3 дата выхода февраль 2015.

В то время студия написала:
Мы могли бы выпустили игру к концу этого [2014] года, как мы первоначально планировали. Все же мы пришли к выводу, что несколько дополнительных месяцев позволят нам достичь того качества, которое удовлетворит нас, того качества, которого геймеры ожидают от нас.

Переносы и слухи про кранчи, в 2021 году это звучит до боли знакомо

Игра Ведьмак 3 была анонсирована в 2013 году, и у должна была выйти уже в следующем году на трех платформах ПК, PlayStation 4 и Xbox One. Дата выпуска была позже перенесена с третьего квартала 2014 года на февраль 2015 года. После пропуска запланированной даты выпуска 24 февраля, Ведьмак 3: все таки был был выпущен во всем мире 19 мая 2015 года.

2017 год


Ведьмак 3 вышел 2 года назад и разошелся тиражом почти в 30 миллионов копий. Киберпанк 2077 находится в разработке уже около 5 лет, с 2012 года, и его релиз запланирован не только на ПК и всех консолях актуального поколения (c несколькими разными аппаратными ревизиями и разной производительностью), но и только готовящихся к релизу некст-генах PlayStation 5 и Xbox Series X/S

Несмотря на то, что студия CD Project Red по-прежнему (или вновь) окутана романтическим флером финансовой успешности и изменчивого духа инди-разработки, в игровой прессе вспыхивает новый скандал. На сайте отзывов о работодателях Glassdoor всплывает множество весьма критичных высказываний бывших сотрудников CDPR. Негативные появились в период с 2015 по 2017, появлялись и позже.

Вот фрагмент отзыва за 2015 год:

Управление никудышное, нет никого, кто действительно мог бы управлять людьми. Оно состоит из старых сотрудников, которые работают в компании, потому что они вложили свое время [и оказались здесь раньше всех].

Разработчики часто бывают молодыми и неопытными. Оба фактора вместе обеспечивают абсурдный объем кранчинга. Для некоторых периоды кранчинга длились более ДВУХ лет. Конечно, взять выходные дни было практически невозможно.

При этом даже лучшим сотрудникам может быть отказано в повышении на основании надуманных соображений, а других могут повысить, несмотря на несоблюдение требований. Это делает систему карьерного роста бессмысленной, поскольку ее можно обмануть без каких-либо последствий.

Удержание сотрудников ужасно. Считается, что любой сотрудник, недовольный своим положением в компании, должен немедленно подать заявление на увольнение, и никаких усилий для его удержания не предпринимается. Такая практика приводит к появлению большого количества непрофессиональных новичков в во всех отделах.

А вот лишь часть заголовков отзывов за 2017 год







Просто почитайте эти отзывы сами

В какой-то момент волна негатива и перемывания костей среди геймерской аудитории достигла такого уровня, что CD Projekt Red решили вмешаться. Соучредитель Марчин Ивински и менеджер студии Адам Бадовски выступили с заявлением относительно морального духа в студии.

Полный текст заявления
image


Обычно мы избегаем комментировать обзоры компаний в таких местах, как Glassdoor, но на этот раз особенно в свете того факта, что мы долгое время ничего не рассказывали о Cyberpunk 2077 и видели, как некоторые геймеры забеспокоились о проекте мы хотел бы уточнить несколько моментов.

Звучит тезис такой подход к созданию игр не для всех, как бы говорит критикам: Вы ничего не понимаете, это не то, это другое!

В 2015 году, когда мы выпустили Ведьмак 3: Дикая Охота , у нас было более 200 разработчиков, и это была основная команда студии. С тех пор мы почти удвоили штат сотрудников, и мы продолжаем нанимать. Тогда у команды было просто мало разработчиков, а вот теперь то CDPR удвоит их количество, что должно, подобно волшебной пилюле, решить все проблемы.

Cyberpunk 2077 развивается по плану, но мы не торопимся в этом случае тишина это цена создания отличной игры.

Все хорошо, прекрасная маркиза!

2019 год


В мае 2019 в интервью Kotaku Марцин Ивински заявил, что студия хочет использовать более гуманный подход к поздней стадии разработки, в большей степени опираясь на необязательную политику кранчей.

Мы четко сообщаем людям, что, конечно, есть определенные моменты, когда нам нужно работать усерднее например, я думаю, что демо [2018] E3 является довольно хорошим примером, но мы хотим быть более гуманными и относиться к людям с уважением. Если им нужно взять перерыв, они смогут взять перерыв. Никто не будет за это подвергнут осуждению, если об этом попросят
сказал Ивински.

Заметьте, CD Projekt не говорит о полном устранении кранчей, что было бы более разумным обязательством. И заявление о том, что сотрудники смогут взять отпуск, если им это нужно, не обязательно соответствует действительности в сложной среде коллектива разработчики вполне могут чувствовать скрытое давление, вынуждающее их продолжать работать, например, чтобы поддержать своих товарищей по команде или сохранить свое собственное положение в компании.

2020 год


9 октября Джейсон Шрайер, журналист блумберга опубликовал в Твиттере электронное письмо, в котором глава студии CDPR, Адам бадовски, извинился перед партнерами разработчиков за сверхурочную работу



Шрайер отмечат, что хотя в самой культуре кранчинга нет ничего страшного или преступного, странно, что компания, которая практикует кранчинг в таких огромных масштабах, старательно делает вид, что такой практики и вовсе не существует.

27 октября 2020 бывшая временная сотрудница студии под ником outstarwalker написала серию твитов о низкой оплате труда во время своего участия в разработке Ведьмака 3.



Итак, могу ли я теперь поделиться тем, что я зарабатывала 430 долларов в месяц за работу над лицевыми анимациями над Великой игрой 3 в той великой компании, которая полноценно вознаграждает своих пассионарно кранчащих сотрудников?

Если вы сейчас читаете, потому что сайты и форумы процитировали меня: это не новость. Так было и в 2014 году. Я не первая, кто поднимает данную тему. На протяжении многих лет это является данностью для польской игровой индустрии. У меня, как у фаната своего дела, не хватало смелости поговорить об этом раньше.

Личность outstarwalker подтвердили модераторы форума Reddit. Они добавили её сообщения в общее обсуждение переработок в CD Projekt RED. Девушка, кстати, ведёт свой YouTube-канал и в одном из роликов рассказала, почему покинула польскую студию.

В тоже время за 2020 год релиз Cyberpunk 2077, находящегося в разработке семь лет, суммарно откладывался трижды! Изначально, на
выставке E3 2019 релиз был назначен на апрель 2020 года. В январе 2020 релиз был перенесен на сентябрь 2020 года. В сентябре игра была перенесена на 19 ноября 2020 года.

В начале октября 2020 года CD Projekt Red объявила, что игра стала золотой. Этот термин означает, что игра была готова к началу прохождения сертификации для консолей, а также к запуску процесса печати дисков, которые затем должны успеть поступить в розничные магазины к дате объявленного релиза. Тем не менее, разработка игры была в самом разгаре даже после отправки дисков в печать. С некоторых пор в игровой индустрии продолжение работу над игрой после получения золотого статуса стало обычной практикой для последующего выпуска патча нулевого дня, который исправит любые обнаруженные ошибки в последнюю минуту.

Но студия CDPR вывела эту практику на новый уровень. CD Projekt Red призналась, что завершение патча нулевого дня заняло больше времени, чем ожидалось, что потребовало третьего переноса релиза на 10 декабря 2020 для еще одного короткого 21-дневного рывка кранчинга.
Не смотря на все задержки и патч нулевого дня на консолях прошлого поколения игра оказалась практически неиграбельной, а на консолях нового поколения не был задействован обещанный потенциал графической подсистемы, что вызвало бурю негодования фанатов и серьезные последствия для студии в виде нескольких судебных исков.

2021 год


На в январе генеральный директор CD Projekt SA Марцин Ивински публично принес раскаяние в провальном выпуске видеоигры Cyberpunk 2077 в декабре 2020. Он взял на себя личную ответственность и попросил фанатов не винить команду.

В мрачном пятиминутном видеообращении и сопроводительном сообщении в блоге Ивински признал, что игра не соответствовала стандартам качества, которые мы хотели соблюдать. Мне и всему руководству очень жаль.



Постмортем


Любой изучивший ретроспективу студии Project RED и ее материнской компании поймет, что иначе и быть не могло.

Ошибки в планировании релизов и масштабировании сил разработчиков студии, а также постоянное желание откусить больше, чем можно прожевать, преследовали студию на протяжении последних 10 лет.

Cyberpunk 2077 начинали разрабатывать в эпоху доминирования старых консолей, а к моменту окончания разработки переориентировались на новые, но не отказались от поддержки старых.
В случае незапланированного роста системных требований пользователям компьютера всегда можно посоветовать обновить Dicrect X, драйвера видеокарты да и саму видеокарту. Но с владельцем консоли этот номер не пройдет, ее внутренности апгрейду не подлежат. Если поддержка определенной приставки заявлена разработчиком, игра должна демонстрировать комфортный уровень производительности без каких либо ухищрений со стороны.
CD Project RED намеревалась выпустить игру, не считая ПК, еще одновременно на ДЕВЯТИ разных конфигурациях консолей, некоторые из которых уже обладали недостаточной производительностью для ААА игр в 2020, а некоторые явно избыточной.

На этот раз польская студия попыталась кранчнуть орех, который был ей явно не по зубам.

Подробнее..

Sony одержима играми-блокбастерами от крупных студий, и это может навредить ей

11.04.2021 14:15:43 | Автор: admin
image

Журналист Bloomberg Джейсон Шрайер (автор книг Кровь, пот и пиксели и Press Reset) опубликовал расследование, посвященное проблемам игрового подразделения Sony. Согласно материалу, корпорация стала придерживаться консервативного подхода, делает ставку на широко известные франшизы и игры-блокбастеры, избегая рисков, связанных с поддержкой небольших проектов. Результатом этого становится не только сокращение числа студий-разработчиков и проектов, но и туманное будущее всей экосистемы PlayStation. Мы выбрали из публикации главное.


Курс на укрупнение


Главная проблема Sony это консервативный подход к созданию игр, ставший нормой в последние годы. Хотя Sony принадлежат свыше десятка студий по всему миру, корпорация стала фокусироваться на небольшом количестве крупных игр блокбастеров, которые будут тащить за собой продажи консолей. Студии Santa Monica, Naughty Dog и Guerilla Games получают от Sony восьмизначные бюджеты с тем расчетом, что продукты многократно окупятся, как это произошло с God of War или The Last of Us 2, благодаря которым поставки PlayStation 4 превысили 114 млн штук. Интересно, что у главного конкурента Sony политика совсем другая: закупая игры для своего подписочного сервиса, Microsoft опирается на широкий спектр студий самого разного калибра,

image
Gravity Rush

Из-за одержимости Sony хитами сократилось не только число выпускаемых игр: многие команды, которые работали над нишевыми проектами, были расформированы. Это случилось, например, с Japan Studio, работавшей над популярными в Японии тайтлами Gravity Rush и Everybodys Golf: корпорация сообщила разработчику, что больше не намерена выпускать небольшие игры для локальной аудитории.

image
Иллюстрация к игре Days Gone

Другой пример ситуация с продолжением экшена Days Gone. Оригинал, выпущенный студией Bend, хоть и окупился, но вызвал смешанные отзывы со стороны критиков и игрового сообщества. Сотрудники студии попыталась предложить Sony создание сиквела своей игры, но вместо этого их отправили помогать другой студии и работать над продолжением Uncharted. Чтобы всё это не привело к распаду и поглощению команды, в Bend добились, чтобы Sony перебросила их на совершенно новый проект. К декабрю 2020 г. основатели Bend покинули компанию.

Как создателей ремейка The Last of Us выдавили из проекта


Наиболее яркой иллюстрацией расследования стала история Visual Arts Service Group (VASG), так называлась студия из Сан-Диего. Неизвестный герой, VASG в качестве подрядчика-помощника участвовала в разработке многих популярных игровых проектов Sony, включая Человек-Паук и Uncharted. Коллектив собрался опытный. К середине 2010-ых руководитель студии Майкл Мумбауэр понял, что команда вполне созрела для работы над сольным проектом. В этом качестве был выбран ремейк The Last of Us (TLOU). Решение выглядело удачным: с одной стороны, это безопасно не нужно рисковать, выводя на рынок непроверенную идею, плюс есть опора на уже сформированную фан-базу. С другой же, как раз в это время Naughty Dog начала работать над продолжением оригинальной TLOU (которое выйдет в 2020 г. и станет одной из самых обсуждаемых игр). И глава VASG рассудил, что уместно будет в качестве дополнения к новой игре дать игрокам технически улучшенный ремейк первой части для будущей PlayStation 5.

image
The Last of Us

С этим питчем Мумбаэр и пошел к руководству Sony, и получил одобрение. Работа над ремейком стартовала, проект получил кодовое название T1X. Уже тогда настораживало, что проект держался в тайне и не получал средств на расширение команды, но тем не менее небольшая команда продолжала работать. Весной 2019 г. была представлена демонстрационная версия игры.

image
Герман Хульст

Но, увы, на этом оптимистичная часть истории завершилась. Новый руководитель PlayStations Worldwide Studios Герман Хульст, по словам инсайдеров, посчитал бюджет на разработку непомерно большим для ремейка. И его не убедили аргументы, что создание графики для нового движка PlayStation 5 (а также переработка игровых механик) требует дополнительных ресурсов и сотрудников.

Хульст дал указание VASG приостановить работу над ремейком, а команду проекта (на тот момент около 200 сотрудников) отправил на помощь Naughty Dog, которая не успевала в срок отшлифовать вторую The Last of Us. Затем роли поменялись: когда TLOU 2 была готова, часть сотрудников Naughty Dog отправили на разработку проекта T1X. Разумеется, поскольку это были авторы оригинальной игры, авторитета и репутационного веса у них было больше. В итоге кончилось всё тем, что T1X передали в руки Naughty Dog, а работавшая над ним 5 лет VASG вновь вернулась к тому статусу, от которого хотела уйти вспомогательной студии без собственного проекта

Для креативного ядра студии это было поражением. Студия фактически растворилась, ключевые сотрудники покинули ее, даже внутри корпорации VASG стали называть уже просто Naughty Dog South.

Что дальше?..


Как полагает Шрайер, фокус на блокбастерах может сыграть с Sony плохую шутку. Ведь часто именно, как казалось, небольшие и нишевые проекты и студии могут привести к ошеломительному успеху. Совсем недавно это произошло с игровой платформой Roblox, капитализация которой достигла $45 млрд., в то время как Sony, наоборот, не стала вкладывать сколько-нибудь серьезных средств в продвижение и развитие собственного аналога, игры Dreams от студии Media Molecule. Не исключено, что амбиции корпорации в сочетании с консервативным подходом могут создать для Sony слишком рискованные перспективы.

Подробнее..

Изучаем кибергруппировку Cobalt какие новые инструменты и атаки используют хакеры

16.06.2020 16:14:27 | Автор: admin


Специалисты PT Expert Security Center отслеживают активность группы Cobalt с 2016 года. На сегодняшний день группа атакует финансовые организации по всему миру. Ущерб от этих атак еще год назад превышал 1 млрд рублей. За последние четыре года мы опубликовали несколько отчетов об атаках, связанных с данной группой.

В течение пошлого года группа Cobalt не только модифицировала свои основные инструменты CobInt и COM-DLL-дроппер в связке с JavaScript-бэкдором more_eggs, но и применяла новые способы доставки и новые техники для обхода средств защиты на начальном этапе атаки. Обновление тактик и инструментов может быть обусловлено тем, что группа уже долгое время находится по прицелом у исследователей со всего мира, и ей необходимо быть на шаг впереди, чтобы обходить средства защиты.

В среднем в 2019 году группа проводила по три атаки в месяц. В нашей новой статье разбор новых тактик и инструментов кибергруппировки. Полная версия исследования доступна по ссылке.

Фишинговый сайт European Central Bank


В конце августа 2019 года, исследуя угрозы информационной безопасности, мы зафиксировали атаку с использованием CobInt. Атака, предположительно, была нацелена на европейские финансовые организации. У нас нет данных о том, насколько она была успешна. Дроппером для CobInt служил кастомный NSIS-installer. Мы обнаружили три версии такого дроппера: для Chrome, Firefox и Opera. Внутри каждого была одна и та же версия CobInt и соответствующий установщик для браузера. После запуска дроппер сохранял CobInt в папку %TEMP%, запускал его и установщик. Проанализировав ВПО мы выяснили, что распространение дропперов происходило с фишингового сайта ecb-european[.]eu.



Главная страница фишингового сайта

Сайт являлся копией сайта Европейского центрального банка за исключением того, что при его посещении пользователю показывалось всплывающее окно с просьбой обновить браузер.



Всплывающее окно на поддельном сайте ECB

В результате на компьютер пользователя скачивался вышеупомянутый дроппер. В исходном коде страницы была ссылка на скрипт, который отображал это окно.

Вероятнее всего пользователи попадали на сайт с помощью фишинговой рассылки, похожей на те, которые чаще всего использует группа Cobalt.

2. Вредоносный VHD


В конце декабря 2019 года мы обнаружили очередной загрузчик CobInt группы Cobalt. Необычным был контейнер, в котором содержался данный загрузчик. Это был virtual hard disk (VHD), который, предположительно, рассылался по почте.

VHD-формат используется с момента создания технологии виртуализации Hyper-V. VHD-файл может содержать все, что можно найти на обычном HDD: дисковые разделы, файловую систему с папками и файлами. Начиная с Windows 7 пользователь может вручную подключить VHD, например через MMC-консоль. Начиная с Windows 8 пользователь может подключить VHD просто два раза кликнув на него мышкой, и он отобразится в системе как обычный диск.

В сентябре 2019 года в блоге CERT/CC вышла статья об опасности VHD-файлов и об использовании их как потенциального вектора в атаках. Will Dorman показал, что ни антивирусы, ни mark on the web не будут сигнализировать пользователю о том, что содержимое скачанного из интернета VHD-файла может нанести вред компьютеру. Не исключено, что результатами этого исследования воспользовалась группа Cobalt. Их VHD-файл также не детектировался антивирусами в момент его появления на VirusTotal. Спустя полгода этот файл детектируется всего одним антивирусом: это очень низкий показатель.



Внутри VHD находятся два файла CobInt. К концу одного из файлов прикреплены два невалидных сертификата Google для снижения вероятности обнаружения средствами защиты.

После того как VHD будет монтирован, пользователь должен вручную запустить один из файлов. По функциям два файла идентичны. После запуска одного из CobInt происходит загрузка основной библиотеки. Основная библиотека загружается CobInt с контрольного сервера в виде HTML-файла.

3. BIFF-макрос


В марте 2020 года мы зафиксировали документ группы Cobalt в формате XLS, который скачивал и запускал COM-DLL-дроппер. Документ содержал в себе достаточно старый формат макроса Excel 4.0 и практически не определялся антивирусами (1 вердикт из 60 по данным сервиса VirusTotal).



Количество вердиктов антивируса при первой загрузке файла с макросом Excel 4.0 на VirusTotal
Этому стандарту макросов уже 20 лет. Его особенность в том, что макрос не хранится в VBA-проекте, он расположен в ячейках страницы, при этом страница может быть скрыта в самом Excel.

Это значит, что макрос будет не в VBA-стриме, а в BIFF-записи (Binary Interchange File Format).
Если открыть документ в Excel, то мы увидим лишь одну страницу и отсутствие макросов в VBA-проекте. Однако Excel все равно обнаружит наличие макроса и заблокирует его исполнение.

Открыв исходный документ в менеджере формул, мы увидим, что одна из формул запускается автоматически при открытии документа.



Формула макроса, которая запускается при открытии документа

Начальная формула запускает большую цепочку команд СЦЕПИТЬ, ВПОЛНИТЬ, СИМВОЛ, ВЗВАТЬ, что в конечном итоге приведет к загрузке и запуску COM-DLL-дроппер. Вся цепочка команд разбросана по огромному полю ячеек страницы Excel, что затрудняет анализ.



Формулы макроса, приводящие к загрузке и запуску COM-DLL-дроппера

4. Анализ COM-DLL-дроппера


В начале апреля 2020 года мы обнаружили новую версию COM-DLL-дроппера. По функциям он отличался от всех, что мы видели ранее. Однако полезная нагрузка в виде JavaScript-бэкдора more_eggs осталась такой же.

COM-DLL-дроппер появился в арсенале Cobalt летом 2017 года и до сих пор используется группой для доставки JavaScript-бэкдора more_eggs, который содержится в нем в зашифрованном и заархивированном виде.

Особенности дроппера:

  • Полностью написан на PureBasic.
  • Использует большое число различных техник антианализа.
  • Содержит в себе зашифрованные и заархивированные JavaScript-загрузчик, JavaScript-бэкдор, легитимную утилиту преобразования командной строки для запуска JavaScript-бэкдора more_eggs.
  • Имеет встроенный обфускатор для зашитого внутрь JavaScript-бэкдора и JavaScript-загрузчика.

Заключение


Группа Cobalt продолжает атаковать финансовые организации по всему миру, берет на вооружение новые тактики, обновляет инструментарий и старается все более эффективно обходить средства защиты. Из-за карантина сейчас многие работники кредитно-финансовой сферы работают на удаленке, вне досягаемости корпоративных средств защиты. К тому же многие злоумышленники используют тему коронавируса в своих атаках, как, например, группа Higaisa. Не исключено, что группа Cobalt попытается использовать эту тему в своих будущих атаках.

Полная версия исследования доступна по ссылке.

Авторы: Денис Кувшинов, Сергей Тарасов, Даниил Колосков, PT Expert Security Center
Подробнее..

Стек вызовов JavaScript и ещё большая магия

12.04.2021 18:13:34 | Автор: admin


В начале апреля на хабре была опубликована статья JavaScript: Стек вызовов и магия его размера её автор пришёл к выводу, что каждый кадр стека занимает (72 + 8 * число_локальных_переменных) байтов: Получается, что мы посчитали все верно и можем утверждать, что размер пустого ExecutionStack в Chrome равен 72 байтам, а размер коллстэка чуть меньше одного мегабайта. Отличная работа!

Для затравки немного изменим код, использованный AxemaFr для экспериментов:

{let i = 0;const func = () => {  i += 1.00000000000001;  func();};try {  func();} catch (e) {  console.log(i);}}

Вместо 1 теперь на каждом шаге прибавляем чуточку больше, и в результате вместо 13951 получаем 12556.000000000002 как будто бы в функции добавилась локальная переменная!

Повторим вопросы, которыми задавался Senior Frontend Developer AxemaFr: Почему же так? Что изменилось? Как понять, посмотрев на функцию, сколько раз она может выполниться рекурсивно?!

Готовим инструменты


В командной строке Chrome можно передавать аргументы для JS-движка; в частности, можно поменять и размер стека с 984 КБ на любой другой ключом --js-flags=--stack-size=.

Разобраться в том, сколько стека требуется каждой функции, нам поможет ключ --print-bytecode, уже упоминавшийся ранее. Не упоминалось то, что отладочный вывод направляется в stdout, которого у Chrome под Windows тупо нет, потому что он скомпилирован как GUI-приложение. Исправить это несложно: сделайте копию chrome.exe, и в своём любимом hex-редакторе исправьте байт 0xD4 со значения 0x02 на 0x03 (тем, кто с hex-редактором не дружит, этот байт поможет исправить скрипт на Python). Но если вы прямо сейчас читаете эту статью в Chrome, и просто запустите исправленный файл предположим, что вы назвали его cui_chrome.exe то откроется новое окно в уже существующем экземпляре браузера, и аргумент --js-flags будет проигнорирован. Чтобы запустить новый экземпляр Chrome, нужно передать ему какую-нибудь новую --user-data-dir:
cui_chrome.exe --no-sandbox --js-flags="--print-bytecode --print-bytecode-filter=func" --user-data-dir=\Windows\Temp

Без --print-bytecode-filter вы утонете в километровых дампах байткода функций, встроенных в Chrome.

После запуска браузера откройте консоль разработчика и введите код, использованный AxemaFr:

{let i = 0;const func = () => {  i++;  func();};func()}

Ещё до того, как вы нажмёте на Enter, в консольном окне позади Chrome появится дамп:
[generated bytecode for function: func (0x44db08635355 <SharedFunctionInfo func>)]Parameter count 1Register count 1Frame size 8   36 S> 000044DB086355EE @    0 : 1a 02             LdaCurrentContextSlot [2]         000044DB086355F0 @    2 : ac 00             ThrowReferenceErrorIfHole [0]         000044DB086355F2 @    4 : 4d 00             Inc [0]         000044DB086355F4 @    6 : 26 fa             Star r0         000044DB086355F6 @    8 : 1a 02             LdaCurrentContextSlot [2]   37 E> 000044DB086355F8 @   10 : ac 00             ThrowReferenceErrorIfHole [0]         000044DB086355FA @   12 : 25 fa             Ldar r0         000044DB086355FC @   14 : 1d 02             StaCurrentContextSlot [2]   44 S> 000044DB086355FE @   16 : 1b 03             LdaImmutableCurrentContextSlot [3]         000044DB08635600 @   18 : ac 01             ThrowReferenceErrorIfHole [1]         000044DB08635602 @   20 : 26 fa             Star r0   44 E> 000044DB08635604 @   22 : 5d fa 01          CallUndefinedReceiver0 r0, [1]         000044DB08635607 @   25 : 0d                LdaUndefined   52 S> 000044DB08635608 @   26 : ab                ReturnConstant pool (size = 2)Handler Table (size = 0)Source Position Table (size = 12)

Как изменится дамп, если строчку i++; заменить на i += 1.00000000000001;?
[generated bytecode for function: func (0x44db0892d495 <SharedFunctionInfo func>)]Parameter count 1Register count 2Frame size 16   36 S> 000044DB0892D742 @    0 : 1a 02             LdaCurrentContextSlot [2]         000044DB0892D744 @    2 : ac 00             ThrowReferenceErrorIfHole [0]         000044DB0892D746 @    4 : 26 fa             Star r0         000044DB0892D748 @    6 : 12 01             LdaConstant [1]         000044DB0892D74A @    8 : 35 fa 00          Add r0, [0]         000044DB0892D74D @   11 : 26 f9             Star r1         000044DB0892D74F @   13 : 1a 02             LdaCurrentContextSlot [2]   37 E> 000044DB0892D751 @   15 : ac 00             ThrowReferenceErrorIfHole [0]         000044DB0892D753 @   17 : 25 f9             Ldar r1         000044DB0892D755 @   19 : 1d 02             StaCurrentContextSlot [2]   60 S> 000044DB0892D757 @   21 : 1b 03             LdaImmutableCurrentContextSlot [3]         000044DB0892D759 @   23 : ac 02             ThrowReferenceErrorIfHole [2]         000044DB0892D75B @   25 : 26 fa             Star r0   60 E> 000044DB0892D75D @   27 : 5d fa 01          CallUndefinedReceiver0 r0, [1]         000044DB0892D760 @   30 : 0d                LdaUndefined   68 S> 000044DB0892D761 @   31 : ab                ReturnConstant pool (size = 3)Handler Table (size = 0)Source Position Table (size = 12)

Теперь разберёмся, что поменялось и почему.

Исследуем примеры


Все опкоды V8 описаны в github.com/v8/v8/blob/master/src/interpreter/interpreter-generator.cc
Первый дамп расшифровывается так:
LdaCurrentContextSlot [2]           ; a := context[2]ThrowReferenceErrorIfHole [0]       ; if (a === undefined)                                    ;   throw("ReferenceError: %s is not defined", const[0])Inc [0]                             ; a++Star r0                             ; r0 := aLdaCurrentContextSlot [2]           ; a := context[2]ThrowReferenceErrorIfHole [0]       ; if (a === undefined)                                    ;   throw("ReferenceError: %s is not defined", const[0])Ldar r0                             ; a := r0StaCurrentContextSlot [2]           ; context[2] := aLdaImmutableCurrentContextSlot [3]  ; a := context[3]ThrowReferenceErrorIfHole [1]       ; if (a === undefined)                                    ;   throw("ReferenceError: %s is not defined", const[1])Star r0                             ; r0 := aCallUndefinedReceiver0 r0, [1]      ; r0()LdaUndefined                        ; a := undefinedReturn

Последний аргумент опкодов Inc и CallUndefinedReceiver0 задаёт feedback slot, в котором для оптимизатора накапливается статистика об использованных типах. На семантику байткода это не влияет, так что нас сегодня совсем не интересует.

Под дампом есть приписка: Constant pool (size = 2) и действительно видим, что в байткоде используются две строки "i" и "func" для подстановки в сообщение исключения, когда символы с такими именами undefined. Есть приписка и над дампом: Frame size 8 в соответствии с тем, что в функции используется один регистр интерпретатора (r0).

Стековый кадр нашей функции состоит из:

  • единственного аргумента this;
  • адреса возврата;
  • числа переданных аргументов (arguments.length);
  • ссылки на constant pool c используемыми строками;
  • ссылки на context с локальными переменными;
  • ещё трёх указателей, нужных движку; и наконец,
  • места для одного регистра.

Итого 9*8=72 байта, как синьор AxemaFr и вычислил.

Из семи перечисленных слагаемых, теоретически, меняться могут три число аргументов, наличие constant pool, и число регистров. Что у нас получилось в варианте с 1.00000000000001?

LdaCurrentContextSlot [2]      ; a := context[2]ThrowReferenceErrorIfHole [0]  ; if (a === undefined)                               ;   throw("ReferenceError: %s is not defined", const[0])Star r0                        ; r0 := aLdaConstant [1]                ; a := const[1]Add r0, [0]                    ; a += r0Star r1                        ; r1 := a                               ; ...дальше как раньше

Во-первых, прибавляемая константа заняла третье место в constant pool; во-вторых, для её загрузки понадобился ещё один регистр, так что стековый кадр функции вырос на 8 байтов.

Если не использовать в функции именованные символы, то можно обойтись без constant pool. На github.com/v8/v8/blob/master/src/execution/frame-constants.h#L289 описан формат стекового кадра V8 и указано, что когда constant pool не используется, то размер стекового кадра сокращается на один указатель. Как в этом удостовериться? На первый взгляд кажется, что функция, не использующая именованные символы, не может быть рекурсивной; но взгляните-ка:

{let i = 0;function func() {  this()();};const helper = () => (i++, func.bind(helper));try {  helper()();} catch (e) {  console.log(i);}}

[generated bytecode for function: func (0x44db0878e575 <SharedFunctionInfo func>)]Parameter count 1Register count 1Frame size 8   37 S> 000044DB0878E8DA @    0 : 5e 02 02 00       CallUndefinedReceiver1 <this>, <this>, [0]         000044DB0878E8DE @    4 : 26 fa             Star r0   43 E> 000044DB0878E8E0 @    6 : 5d fa 02          CallUndefinedReceiver0 r0, [2]         000044DB0878E8E3 @    9 : 0d                LdaUndefined   47 S> 000044DB0878E8E4 @   10 : ab                ReturnConstant pool (size = 0)Handler Table (size = 0)Source Position Table (size = 8)

Цель Constant pool (size = 0) достигнута; но переполнение стека, как и раньше, происходит через 13951 вызов. Это значит, что даже когда constant pool не используется, стековый кадр функции всё равно содержит указатель на него.

А удастся ли добиться меньшего размера стекового кадра, чем вычисленное AxemaFr минимальное значение? да, если внутри функции не использовать ни один регистр:
{function func() {  this();};let chain = ()=>null;for(let i=0; i<15050; i++)  chain = func.bind(chain);chain()}

[generated bytecode for function: func (0x44db08c34059 <SharedFunctionInfo func>)]Parameter count 1Register count 0Frame size 0   25 S> 000044DB08C34322 @    0 : 5d 02 00          CallUndefinedReceiver0 <this>, [0]         000044DB08C34325 @    3 : 0d                LdaUndefined   29 S> 000044DB08C34326 @    4 : ab                ReturnConstant pool (size = 0)Handler Table (size = 0)Source Position Table (size = 6)

(При этом цепочка из 15051 вызова уже приводит к RangeError: Maximum call stack size exceeded.)

Таким образом, вывод синьора AxemaFr о том, что размер пустого ExecutionStack в Chrome равен 72 байтам, успешно опровергнут.

Уточняем предсказания


Мы можем утверждать, что минимальный размер стекового кадра для JS-функции в Chrome равен 64 байтам. К этому нужно прибавить по 8 байтов за каждый объявленный формальный параметр, ещё по 8 байтов за каждый фактический параметр сверх числа объявленных, и ещё по 8 байтов за каждый использованный регистр. По регистру отводится для каждой локальной переменной, для загрузки констант, для обращения к переменным из внешнего контекста, для передачи фактических параметров при вызовах, и т.д. Точное число использованных регистров по исходному тексту на JS вряд ли возможно определить. Стоит отметить, что интерпретатор JS поддерживает неограниченное число регистров они не имеют отношения к регистрам процессора, на котором интерпретатор выполняется.

Теперь понятно, почему:
  • добавление неиспользуемого формального параметра (func = (x) => { i++; func(); };) потребляет столько же памяти, как дополнительная локальная переменная;
  • передача необъявленного фактического параметра (func = () => { i++; func(1); };) потребляет вдвое больше памяти, чем дополнительная локальная переменная потому что для передачи понадобился дополнительный регистр:
    [generated bytecode for function: func (0x44db08e12da1 <SharedFunctionInfo func>)]Parameter count 1Register count 2Frame size 16   34 S> 000044DB08E12FE2 @    0 : 1a 02             LdaCurrentContextSlot [2]         000044DB08E12FE4 @    2 : ac 00             ThrowReferenceErrorIfHole [0]         000044DB08E12FE6 @    4 : 4d 00             Inc [0]         000044DB08E12FE8 @    6 : 26 fa             Star r0         000044DB08E12FEA @    8 : 1a 02             LdaCurrentContextSlot [2]   35 E> 000044DB08E12FEC @   10 : ac 00             ThrowReferenceErrorIfHole [0]         000044DB08E12FEE @   12 : 25 fa             Ldar r0         000044DB08E12FF0 @   14 : 1d 02             StaCurrentContextSlot [2]   39 S> 000044DB08E12FF2 @   16 : 1b 03             LdaImmutableCurrentContextSlot [3]         000044DB08E12FF4 @   18 : ac 01             ThrowReferenceErrorIfHole [1]         000044DB08E12FF6 @   20 : 26 fa             Star r0         000044DB08E12FF8 @   22 : 0c 01             LdaSmi [1]         000044DB08E12FFA @   24 : 26 f9             Star r1   39 E> 000044DB08E12FFC @   26 : 5e fa f9 01       CallUndefinedReceiver1 r0, r1, [1]         000044DB08E13000 @   30 : 0d                LdaUndefined   48 S> 000044DB08E13001 @   31 : ab                ReturnConstant pool (size = 2)Handler Table (size = 0)Source Position Table (size = 12)
    
  • изменение в предыдущем примере добавляемого значения на 1.00000000000001 не влияет на размер стекового кадра потому что один и тот же r1 используется и для загрузки константы, и для передачи фактического параметра.


Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru