Pull to refresh
167
Karma
0
Rating
GreyCat @GreyCat

Пользователь

Реверс-инжиниринг визуальных новелл (часть 2)

Reading time 12 min
Views 20K
Open source *Programming *Game development *Debugging *Reverse engineering *
Tutorial

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


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


Перед тем, как погружаться в пучины бинарных дампов, давайте прикинем, как работают большинство движков визуальных новелл. Визуальная новелла сама по себе состоит из текста (реплик героев, диалогов, промежуточного повествования), графики и звуков. Для того, чтобы ее воспроизвести пользователю, явно нужно свести все это воедино с помощью какого-то управляющего воздействия. В теории можно было бы зашить это все прямо в exe-файл, но в 99% случаев (ладно, вру, в 100% виденных лично мной) так все-таки не делают, а хранят такие инструкции отдельно в виде отдельной программы-скрипта. Как правило, скрипт пишется на особенном языке программирования (специфичном для движка), который выглядит как-то так:


Читать дальше →
Total votes 66: ↑64 and ↓2 +62
Comments 33

SCT Error Recovery Control

Reading time 4 min
Views 104K
Computer hardware
… или что такое на самом деле 'raid edition' для жёстких дисков



Немного теории


Существуют две стратегии поведения НЖМД при обнаружении ошибки:
  • standalone/desktop — пытаться прочитать до последнего. Это ощущается как «тормозящий винт», который всё-таки работает, если это единичный сбой, то «затупило, но прошло», плюс характерный перестук перекалибрующихся головок.
  • raid — отваливаться тут же. Это ощущается как «внезапно была ошибка диска но потом mhdd и т.д. НИЧЕГО НЕ НАШЁЛ ЧТО МНЕ ДЕЛАТЬ».
Статегии очевидным образом различаются по предназначению — десктоп лучше протупит, но ошибку не выдаст, в рейде есть запасной винт, и терпеть минутные тормоза на чтении никто не имеет никакой возможности. Не получилось прочитать? Читаем с запасных винтов, помечаем весь винт как сбойный, начинаем ресинк, а диск потом отправят в утилизатор. Возможно, незаслуженно, но нечего икать на ответственной должности.

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

Расшифровка названия


Возможность управления поведением диска при ошибках называется очень и очень путанно: SCT ERC. Это расшифровывается как SCT Error Recovery Control. SCT в свою очередь название общего протокола SMART Command Transport. SMART в свою очередь расшифровывается как Self-Monitoring, Analysis and Reporting Technology, таким образом, полная расшифровка SCT ERC звучит так: Self-Monitoring, Analysis and Reporting Technology Command Transport Error Recovery Control (выдохнули).
Читать дальше →
Total votes 117: ↑113 and ↓4 +109
Comments 99

Just another guitar files viewer

Reading time 2 min
Views 674
Lumber room

Пролог


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

Подробнее
Total votes 6: ↑5 and ↓1 +4
Comments 12

Анонсирована аппаратная поддержка транзакционной памяти в Haswell

Reading time 4 min
Views 14K
Intel corporate blog
Haswell будет очень инновационным Tock'ом. Еще в прошлом году стало доступно описание новых операций с целыми в AVX. А на этой неделе было опубликовано очередное расширение архитектуры X86. В Haswell появится аппаратная поддержка транзакционной памяти! На англоязычных сайтах обсуждение кипит. ISN Arstechnica LWN Engadget

Я думаю, что это самое нетривиальное расширение архитектуры X86 за много-много лет. Фича называется Transactional Synchronization Extensions (далее TSX), и состоит из двух частей — Hardware Lock Elision (HLE) и Restricted Transactional Memory (RTM). Обратите внимание на слово «Restricted». Все верно, есть некоторые ограничения по объему, гранулярности и уровню вложенности транзакций.

Об этих ограничениях и как это все будет работать подробнее под катом. (Никаких картинок, скучный технический текст)
Читать дальше →
Total votes 28: ↑26 and ↓2 +24
Comments 14

Об истории реализаций memcpy и их производительности

Reading time 3 min
Views 22K
Intel corporate blog
void * memcpy ( void * destination, const void * source, size_t num );
Казалось бы, что там сложного? А о реализациях этой функции можно написать целую историю.

Когда я смотрю на окно своего любимого рабочего инструмента — профилировщика Vtune XE, очень часто вижу, что он в очередной раз обнаружил, что значительное время потратилось на копирование памяти. Так и обычно и написано: clock ticks spent in libgcc/[g]libc/kernel memcpy — XX%.

Наверное, поэтому memcpy часто переписывался, например в lkml частенько появляются подобные треды. (Больше реализаций, скорее всего, есть только у сортировок). Казалось бы, в отличие от сортировки, где есть много вариантов и алгоритмов с копированием памяти все просто. На самом деле, даже если говорить о корректности, а не производительности, возможны варианты. (В подтверждение тому — обсуждение эпического бага с участием Линуса Торвальдса и Ульриха Дреппера).

Еще во времена 8086, то есть тридцать четыре года назад, внутри реализации memcpy был следующий код:
mov [E]SI, src
mov [E]DI, ptr_dst
mov [E]CX, len
rep movsb
(все проверки и т.д. здесь и далее опущены для простоты)

Что же изменилось с тех пор? Под катом ассемблерный код и ни одной картинки.
Читать дальше →
Total votes 45: ↑44 and ↓1 +43
Comments 36

Sintel: о технологичности искусства

Reading time 6 min
Views 8.2K
Working with video *Working with 3D-graphics *
Вот и прошёл 2011 год… Впереди новый год — год Дракона. Традиционно важный и успешный год, год сражений и побед. Предыдущий год прошёл в типичной обстановке патентных волнений, перестроений кодовых баз множества продуктов и постоянном развитии технологий. И всё же статья о другом. Рассказ пойдёт о девушке по имени Синтел и драконе из короткометражного фильма Sintel, выпущенного Blender Foundation уже больше года назад, но ставшего огромным стимулом в развитии 3D-редактора Blender на весь 2011 год. Безусловно, эта статья была бы хороша и год назад, но лучше поздно, чем никогда.

Дьявол скрывается в мелочах. В рамках информатики нет такого проекта, в котором удалось бы обойтись от перехода к упрощённой модели, не соответствующей реальному миру. Пример — освещение, волосы, ткани и множество других вещей. Поэтому будет много кликабельных изображений (осторожно, трафик!). Все модели и сцены из фильма распространяются по лицензии CC-BY 3.0 и доступны в виде архивов svn проекта.

Итак, приступим.

Читать дальше →
Total votes 113: ↑112 and ↓1 +111
Comments 29

Офлайн карты/навигация Android

Reading time 6 min
Views 17K
Self Promo
OsmAnd screenshot
В этой статье я хочу рассказать о том, как создавая светлое, доброе, вечное opensource приложение, можно не только увеличить свою карму, но и заработать немного денег.

Чуть более года назад у меня появился Android телефон и сразу же передо мной встал вопрос, что использовать для путешествий, навигации. Как ни крути, но телефон с GPS и интернетом — очень удобен, особенно в незнакомых местах. Просмотрев все существовашие тогда приложения, был немного разочарован. Одно не работает без интернета, другое не поддерживает навигации, третье не ищет POI, четвертое не имеет векторных карт и т.д. Были конечно и бесплатные коммерческие аналоги, но у одних карты подкачали, у других отзывы, а все-таки когда платишь — хочется получить что-то, за что платишь.
Стоит отметить, что в поисках приложений, открыл совершенно замечательный проект OpenStreetMap с отличной детализацией для Беларуси. Поэтому, собрав все силы и желание сделать что-то бесплатное, доступное и нужное, открыл на googlecode проект OsmAnd.
Читать дальше →
Total votes 155: ↑148 and ↓7 +141
Comments 118

Vogue как системный монитор

Reading time 1 min
Views 62K
DIY
Всем привет! Лежал-пылился у меня плеер из того самого выпуска журнала Vogue, решил я из него системный монитор для моего сервера в коробке сделать, и вот что из этого вышло:

Читать дальше →
Total votes 194: ↑183 and ↓11 +172
Comments 67

Мониторинг балансов сотовых телефонов, провайдеров — или как никогда больше не забывать вовремя заплатить за телефон и интернет

Reading time 4 min
Views 20K
System administration *

Есть мнение о том, что главное рабочее качество настоящего сисадмина — лень. Когда у сисадмина есть сервер и этот сервер предоставляет сервис — обычно админ ставит этот сервис на мониторинг — с тем, чтобы знать о том, что с сервисом все в порядке, узнавать о том, что караул-все-пропало-все-сломалось в числе первых и спать спокойно, зная, что если что-то и случится — то его разбудит алерт, а не звонок недовольного босса.

Но как быть, когда сервер и сервис — не свои собственные, а чужие? Ведь такая ситуация случается сплошь и рядом. Типовая небольшая организация: один-два сайта на хостинге (за которые надо вовремя платить, а зачастую еще и следить за тем, не изменились ли тарифы), пачка доменных имен (которые тоже надо вовремя проплачивать, а то и потерять можно), какое-то количество сотовых телефонов (за балансом которых нужно бы следить), договоры (и, соответственно, учет и взаиморасчеты) с поставщиками городской телефонии, с VOIP-провайдером, да в конце концов — просто с интернет-провайдером для офиса.

Сисадмин обычно за всё это платит не сам, но письма-напоминалки пополнить баланс получает в основном он и именно он будет крайним, если забудет напомнить тем, кто платит. Кто из нас хоть раз в жизни не забывал оплатить что-нибудь такое (например, потому что письмо-напоминалка попала в спам) и оставался без связи, без сайта, без домена, без премии, без зарплаты, без работы и т.д. и клятвенно обещал себе, что вот уж в следующий-то раз будет аккуратнее.

Если интересно, как можно обуздать такую стихию - добро пожаловать под кат
Total votes 61: ↑59 and ↓2 +57
Comments 54

Добавление и удаление на ходу SATA/SCSI устройств

Reading time 2 min
Views 62K
Configuring Linux *
Современный Linux (2.6+) может обнаруживать новоподключенные устройства (на шинах, которые поддерживают hotplug). Их можно, так же отключать, предварительно отмонтировав файловые системы и сделав sync. Среди hotplug шин не только USB, но и SATA, SCSI и SAS (в теории, это же применимо и к PATA, но там много глупых контроллеров, которые не умеют адекватно реагировать на исчезновение устройства).

Отключать их лучше не дёргая на ходу физическое устройство, а сказав ядру полностью забыть про про него (гарантируя тем самым, что никаких операций ввода-вывода с устройством производиться не будет, даже если вспохватившийся кеш). Кроме того, иногда нужно выполнять эмуляцию процедуры plug-unplug без физического дёргания питания/шины данных (что не очень хорошо для железа). Самая типичная ситуация — это отладка скриптов udev.

Удаление устройства


echo 1 >/sys/block/sdX/device/delete

(x — буква устройства, sda, sdb, etc).

Эта команда удаляет указанное устройство. Заметим, это низкоуровневая команда, которая не проверяет кеш и статус примонтированности, так что лучше сначала сказать umount & sync.

К сожалению, я не знаю метода совместить выключение шпинделя диска с его удалением с точки зрения ядра. Шпиндель можно отключить командой scsi-spin, однако, при попытке удалить устройство, оно будет раскручено заново и удалено. А у удалённого устройства уже нельзя ничего останавливать (нет устройства). Так что эта часть проблемы пока не решена.

Добавление устройства


Мы не можем «добавить» устройство, мы можем отдать контроллеру команду «перечитать» список устройств, подключенных к тому или иному порту. Если там найдётся что-то интересное, ядру дадут знать.

echo "- - -" >/sys/class/scsi_host/hostX/scan

X — номер шины, совпадает с номером SATA порта на материнской плате. Если не знаете, можете смело делать для всех хостов по очереди, ничего, кроме небольшого лага в дисковых операциях, незаметного для софта и файловой системы, это не даст.

Обратите внимание, host'ы нумеруются с 0, а не с 1. (а в dmesg ata устройства нумеруются с 1).

Так же осуществляется и сканирование USB-SATA переходников (usb-боксов и внешних винчестеров — они просто фигурируют как ещё один scsi_host).

Если мы говорим про SCSI, то вместо "- — -" можно указать точный номер устройства/шины/LUN'а сканируемого устройства (например, «200 1 2»). SATA, в силу архитектурных особенностей (один target для одного initiator) принимает туда только «0 0 0».

Ещё об удалении… Если вы не знаете буквы устройства, но знаете его физическое место подключения, то удалять можно «прямым текстом», записью «1» в "/sys/bus/scsi/devices/targetX:0:0/X:0:0:0/delete".
Total votes 64: ↑54 and ↓10 +44
Comments 48

Библиотека dklab_rowlog для версионирования строк в таблицах PostgreSQL

Reading time 4 min
Views 2.7K
SQL *
В продолжение сегодняшнего топика Версионность и история данных — поделюсь простеньким инструментом, который мы используем.

Dklab_rowlog — это библиотека из нескольких хранимых процедур PostgreSQL, позволяющая добавить версионирование записей к любой таблице в БД. Иными словами, что бы ни происходило с таблицей, как бы данные там ни менялись (добавлялись/удалялись), это будет отражено в специальной табличке-логе.

Преимущества:
  • Версионирование добавляется к любой таблице за 1 минуту с использованием 1 SQL-команды.
  • Можно указать, какие колонки надо сохранять, а какие — нет (что экономит место). При этом запись в лог добавится только в случае, если хотя бы одна из указанных колонок изменилась.
  • Можно указать колонку, которая будет трактоваться как «ID автора изменения».
  • Можно задать колонки, которые будут логироваться в любом случае, независимо от того, менялись они или нет.

Примеры использования


Предположим, нам нужно логировать изменения вот в такой табличке:
Читать дальше →
Total votes 57: ↑53 and ↓4 +49
Comments 13

Шифрование важных файлов в Git

Reading time 2 min
Views 3.7K
Git *
Допустим мы храним данные на некотором удалённом сервере в Bare-репозитории.
Если есть сомнения в честности обслуживающего сервер персонала, или мы опасаемся, что кто-то сопрёт наш проект, можно зашифровать избранные секретные файлы, представляющие особо секретные технологии фирмы и тем самым затруднить клонирование проекта.

Я не буду обсуждать согласование описываемого ниже метода с политикой и лицензионным соглашением бесплатных Git-репозиториев (а ля GitHub) — это дело частностей и вашей совести.

В реализации мы всопользуемся .gitattributes, staging, filters (фильтрами) и главой 7.2 Pro Git Book.

Читать дальше →
Total votes 40: ↑33 and ↓7 +26
Comments 26

Управление монитором по DDC

Reading time 2 min
Views 68K
Configuring Linux *
Что мониторы умеют DDC, думаю, знают все. Традиционно, он используется X-сервером для определения параметров изображения, и админами, с помощью ddcprobe, для изучения «что не так сделал X-сервер» (ddcprobe показывает поддерживаемые монитором режимы по мнению самого монитора).

Однако, ddc — это двусторонний протокол. Он не только говорит компьютеру о том, что умеет монитор, но и монитору, о том, что хочет от него компьютер.

Windows-пользователи мониторов Samsung знают их magic tune, который позволяет выставлять яркость/контраст из (неудобной) программы. Однако, существует более интересный метод работы с монитором: это утилита ddccontrol.

C помощью этой утилиты можно:
  • Изменять яркость, контрастность, гамму изображения. Причём, изменение яркости осуществляется изменением яркости подсветки! (разумеется, если монитор это физически умеет делать)
  • Программно переключать пресеты (movie/text/user/game); это куда удобнее, чем тыкать соответствующую кнопку на самом мониторе
  • Играться с недокументированными возможностями мониторов, например, вызывать заблокированные из меню языки и пункты настроек. На моём мониторе, например, мне удалось подвинуть картинку при работе по DVI (обычно этот пункт меню доступен только для VGA)
  • Блокировать кнопки монитора (думаю, это не у всех моделей, но у самсунга точно можно). Блокируются все кнопки, кроме вкл/выкл, выключение/включение монитора эту блокировку сбрасывает.
  • Включать и выключать монитор (полностью, без мигающей в standby лампочки)


Итак, вот несколько примеров использования утилиты:
Читать дальше →
Total votes 72: ↑62 and ↓10 +52
Comments 46

Information

Rating
Does not participate
Registered
Activity