JParser аналіз двійкових файлів працює просто
jParser робить простим читання структур даних із двійкових файлів джаваскриптом.
- Ви один раз описуєте структуру, аналіз відбувається автоматично.
- Процес аналізу даних то, можливо розширений самописними функціями. Чим спрощується аналіз нетривіальних файлів.
- jParser діє і в браузері, і в NodeJS, тому що працює на основі jDataView.
- Цілі числа без знака:uint8, uint16, uint32
- Зі знаком:int8, int16, int32
- дрібні з плаваючою точкою:float32, float64
- Рядкові:char, string(len)
- Масив:array(type, len)
- Положення:tell, skip(len), seek(pos), seek(pos, func)
-
parse(value)- запускає аналіз, може використовуватися рекурсивно. Поведінка залежить від типу аргументу:
- функція:викликає функцію;
- рядок:розіменування (за вказаним ім'ям береться значення зі структури);
- масив:виклик функції, ім'я якої - перший елемент масиву, а наступні елементи є аргументами;
- об'єкт:повертає об'єкт із тими самими іменами полів, але проаналізованими значеннями.
-
new jParser (data, structure)
- data- це jDataView з даними, що піддаються аналізу. Можете передати рядок байтів (String), можете передати ArrayBuffer ці типи даних перетворюються на jDataView автоматично.
- structure- об'єкт з описом всіх структур даних.
Звичайна структура Сі
Можна описувати структури даних. Це джаваскриптовий об'єкт, у якому поля є іменами даних, які значення — типами.
Структури можуть містити інші структури. Використовуйте назву структури у вигляді рядка, щоб послатися на її опис. Нижченаведений приклад є частиною структури файлу, що містить модель для World of Warcraft:
Вам неважко визначати нові елементарні типи. Ви можете використовувати існуючі види конструкцій, такі як об'єкти (float3у наведеному нижче прикладі) або масиви (float4у прикладі). Якщо ж ви хочете визначити складніший тип, то завжди є можливість визначити нову функцію, що покладається на методthis.parseдля первинного аналізу (hex32у наведеному нижче прикладі):
Якщо розмір масиву заздалегідь не відомий, можете помістити його місце у структурі функцію, повертає ціле число. У цій функції ви можете черезthis.currentзвернутися до об'єкта, в даний час аналізу, зчитувати вже отримані поля його.
Розвинений аналіз даних
Найприємніша особливість jParser полягає в тому, що складні алгоритми обробки можна висловити функціями всередині опису структури даних. Це дозволяє аналізувати складні файли, не відокремлюючи опис структури від кодуїї оброблювачів.
Початок роботи
На движку NodeJS
Просто використовуйтеnpmдля встановленняjParser—
Я пропатчив jQuery, забезпечивши завантаження двійкових файлів у найкращому двійковому форматі. Підключіть цей пропатчений код jQuery, а також jDataView та jParser.
Застереження
- Не починайте ім'я поля цифрою в описі структури даних.
- Не перевизначайте поле з заданим ім'ям, не поміщайте в той же об'єкт інше однойменне поле.
Аналіз ICO. Це простий приклад аналізу двійкового файлу на движку NodeJS. Він показує, як вирішуються багато типових завдань, що виникають при розборі двійкових даних.
- ico.js- структура даних для jParser.
- ico.json - результат аналізу.
- tar.html- структура jParser.
- m2.js- структура jParser.
- model.json - результат аналізу.

Внутрішні файли Diablo 3
- convert.coffee- структура для jParser. Кофескрипт записувати структуру файлу ще простіше.
- Приклади оброблених файлів:
Хардкорна конфа за С++. Ми запрошуємо лише профі.