Pull to refresh
312
0
Владимир Маслов @HotWaterMusic

Руководитель, автор ТГ-канала Сеньор Юникорн

Send message
Это родовая травма, корни которой в том, что Стив Джобс всю свою жизнь отказывался воспринимать игровую индустрию серьезно. Apple Arcade в своей первой итерации оказался неудачной инициативой, в прошлом году утекла информация о том, что одиночные игры не принесли ожидаемого результата — игроки быстро проходили 1-2 игру и уходили. Поэтому Эппл попросила принимающих в ней участие разработчиков переключиться предпочтительно на мультиплеерные проекты, которые способны удерживать игроков гораздо дольше. На самом деле, по слухам студии уже разрабатывают собственные Скайримы под Arcade, плюс в прошлом году был удачный Genshin Impact.
Действительно, спасибо за уточнение!
Действительно, не следующим, будет полноценно поддерживать только с 63 версии. Спасибо!
Просто отлично. Спасибо, добавил!
Дело там вот в чём. Оригинальная архитектура Unity была component-based, у подобного подхода были недостатки, которые активно проявили себя в течение 15 лет. Теперь переписали всё под data-oriented design с оптимизацией под кэширование. Труд значительный, но к сожалению евангелисты это упоминают вскользь, везде делая акцент на многопоточность и job system.

Как поёт одна моя любимая группа:
Take me down to cache hit city where the grass is green and the performance is pretty.
Спасибо за комментарий! Лично я с вашей позицией полностью согласен. Всегда переводил «design» в зависимости от контекста.

Но сегодня погуглил и задумался — некоторые электронные СМИ теперь действительно пишут «дизайн процессора», подразумевая именно что архитектуру. На официальном сайте AMD про Ryzen 7 написано «прекрасно сбалансированный дизайн», и речь там вроде как идёт не про внешние качества. Такими темпами, «дизайн» вскоре может закрепиться и стать неологизмом, пусть и не очень удобным.

В статье речь действительно идёт про архитектуру процессора, поэтому для ясности поменял заголовок.
Спасибо за разъяснение.

Я не указал в своем комментарии, что вел речь исключительно о портировании игр — ведь Xbox One все-таки по старой памяти воспринимается больше как игровая консоль. Недавний Gears of War: Ultimate Edition на Windows и Xbox One по утверждению различных изданий — это именно что универсальный порт, сделанный в виде UWP, но ведь данная игра явно не подвержена ограничениям виртуалки с ОС и имеет доступ к основной памяти для игр. Поэтому после вашего комментария я предположил, что обладатели полноценных девкитов каким-то неизвестным образом имеют доступ к тем самым 5 Гб памяти в UWP-играх. На самом деле, даже когда эти 5 Гб есть, для того чтобы из них выжать максимум, приходится писать сложные собственные аллокаторы памяти с учетом архитектуры конкретной консоли — по крайней мере, на PS3 и PS4.

Казуальные мобильные игры будут чувствовать себя хорошо, они не упрутся в эти лимиты. Для проектов больше среднего на Unity 1 Гб будет маловато из-за неоптимального использования памяти, UE4 под UWP пока недоступен но он захочет еще больше. Те, кто пишет на C++ & DirectX 11, смогут позволить себе выжать все соки, но мне кажется, что подобная связка сейчас характерна скорее для студий, чем для одиночек — которые в большинстве пользуются именно UE и Unity, и многие из них не привыкли что-то там оптимизировать в принципе.

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

Но ведь в документации нигде не сказано, что UWP-игры на Xbox One будут чем-то отличаться от приложений, т.е что они будут выполняться за пределами этих 3 Гб, поэтому я вслед за пользователями с neogaf предположил, что это какой-то restricted UWP:
UWP apps and games running on Xbox One share resources with the system and other apps. Therefore, UWP apps and games will have access to the following resources: In future releases, the maximum available memory will be 1 GB.

For games development, it’s important to keep in mind that Xbox One, like other games consoles, is a specialized piece of hardware that requires a specific hardware-based development kit to access its full potential.

[MSDN] System resources for UWP apps and games on Xbox One

Там между прочим еще и CPU & GPU limits указаны, для GPU это 45%. Других достойных источников я по теме не нашел.
Этот факт подразумевается само собой разумеющимся для всех, кто имел дело с UWP, и просто отдел маркетинга не досмотрел?
The preview of Dev Mode on Xbox One is available to anyone now.

The preview only offers access to 448 MB of the Xbox One's 8 GB of RAM.
When Dev Mode comes out of preview, developers will have access to the full 1 GB of RAM supported for UWP Xbox games.

Это пять!
Надо было это сделать год назад, сейчас уже поезд ушел. Два крупнейших коммьюнити уже сформировались вокруг UE4 и Unity — по ним доступно огромное количество тьюториалов и материалов. Мигрировать проекты на CryEngine никто не собирается.
Касательно именно движка — доступная полгода назад четвертая версия сильно уступала конкурентам как в плане самой архитектуры, так и в мелочах — даже основные тулзы регулярно крашились.
Если стало интересно, то в продолжение темы есть видео с субтитрами на английском с Google Test Automation Conference 2014.
Единственный встретившийся мне за эти дни комментарий про нее здесь, где автор пишет, что инструмент намечается очень полезный для реального кода, однако «the static analysis is 'local', which I understood as meaning it can look at one function at a time (plus any visible class definitions and signatures of called functions, but not their bodies)».
В октябре выйдет всего лишь превью-версия от Microsoft, затем наверняка будут улучшать производительность.
Да. Страуструп не просто так сделал акцент на написание type-safety и memory-safety кода на C++.
Rust также упоминает Герб Саттер в качестве одного из источников вдохновения.
А на Reddit обсуждали конкретные заимствования.
Для тех, кто как и я заинтересовался комментарием: если запросить бесплатный отрывок с www.typesafe.com, то на почту прилетит купон на скидку на саму книгу в 45% для покупки на manning.com.
Спасибо dordzhiev за поддержку, он прав — кроме реверс-инжиниринга исходного кода, здесь больше ничего не придумаешь.

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

Давайте рассмотрим пример с системным вызовом getpid из описания репозитория фреймворка JuSt-ROP (настоятельно рекомендую прочитать, поскольку там даны некоторые объяснения):

var chain = new rop();

try {
    chain.syscall("getpid", 20);

    // rax is the return value
    chain.write_rax_ToVariable(0);

    chain.execute(function() {
        console.log("PID: " + chain.getVariable(0).toString());
    });
}
catch(e) {
    logAdd("Incorrect gadget address " + e.toString(16));
}

chain — это объект класса rop(), который определен в файле just-rop.js и содержит в себе функции syscall (для осуществления системного вызова, который реализуется несколькими вызовами функций add()), add (для записи инструкции по адресу) и набор функций-хелперов write_<имя_регистра>_ToVariable / read_<имя_регистра>_FromVariable для чтения/записи регистра из/в переменную.

В файле gadgets.js описаны гаджеты в следующем формате:

gadget(instructions, module, address)

Спустимся по коду вглубь. В syscall() мы вызываем функцию add(), передавая в нее имя одного из гаджетов (для получения его адреса) и значение:

this.add("pop rax", systemCallNumber);
if(typeof(arg1) !== "undefined") this.add("pop rdi", arg1);

Функция add производит следующее: берет адрес гаджета, записывает его по адресу длины цепочки chainAddress + chainLength, затем прибавляет к длине цепочки еще 8 (по всей видимости, бит, для следующего адреса) и записывает по следующему адресу переданное в add значение.

Функция add для записи значения вызывает функцию setU64into(). Это функция, объявленная глобально в файле exploit.jswindow.setU64into(). Функции из этого файла выглядят как реализация уязвимости WebKit CVE-2012-3748, насколько я понял там все завязано на переполнении переменных типа u32/u64 в V8, но чтобы разобраться в деталях ее работы, надо уметь писать экплойты для WebKit. В принципе, можете попробовать разобраться по презентации.

После того, как chain.write_rax_ToVariable(0); запишет возвращенное вызовом значение регистра rax в переменную, его можно будет получить при помощи chain.getVariable(0).
1. Насколько я понял по коду, специального API нет — только запись по адресам при помощи хаков, только хардкор. Адреса становятся известны после эксплуатации уязвимости Uint32Array. Алгоритм подробно расписан в exploit.js, системные вызовы делаются функциями из just-rop.js при помощи установки значений в адреса памяти. Во многом код автора поста — это расширенная версия эксплойта от nas, в частности он точь-в-точь перенес этот кусок из старого кода.
2. Да, в принципе можно просто перейти в браузере по ссылке cturt.github.io/PS4-playground. Правда, проверить не удалось — на прошивке 2.51 эксплойт уже не работает; видимо, поменялись адреса или закрыли уязвимость.
По слухам, с ней дела гораздо серьезнее. Начиная с того, что если тут ядро частично фактически открыто, то в случае PS Vita ничего подобного нет.

Полноценный нативный хак Rejuvenate для PS Vita с прошивкой от 3.00 до 3.51 вышел совсем недавно, в июне, и он пока что кроме «Hello, world!» ничего запускать не умеет. Давно и успешно взломана часть, которая является эмулятором для запуска игр с PSP — для установки этих хаков требуется успевать скачивать специальные игры с эксплойтом из PSN.

Все известные мне новости по теме выкладываютсяздесь.
«Блогератор» хорош! Бывает, перейдешь туда прочитать одну статью вроде этой, и в итоге так и проводишь там весь вечер. Там встречаются и полезные технические интервью, вроде недавнего про PHP7 с Дмитрием Стоговым.

Насчет книги не знаю, не читал. Судя по оглавлению — тесно пересекается с тематикой блога.
В теории, ничто не мешает писать на Go и монолиты. Есть мнение, что связка «Go + микросервисы» во многом появилась из-за нынешней моды на микросервисы в целом. Однако это уже переросло в стереотип насчет языка, и такими темпами мы монолитов на Go не увидим — а ведь было бы интересно.
Спасибо за статью!
Последний абзац заинтриговал. Есть ли какие-то общепринятые практики, куда развивать пример в случае задач из разряда highload? Или это тема для следующего поста? :)
1
23 ...

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity