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)
Методи jParser:

    parse(value)- запускає аналіз, може використовуватися рекурсивно. Поведінка залежить від типу аргументу:

  • функція:викликає функцію;
  • рядок:розіменування (за вказаним ім'ям береться значення зі структури);
  • масив:виклик функції, ім'я якої - перший елемент масиву, а наступні елементи є аргументами;
  • об'єкт:повертає об'єкт із тими самими іменами полів, але проаналізованими значеннями.
  • tell()— повертає поточне положення (зсув) в аналізованому файлі.
  • skip(count)— пересунутись у файлі (пропустити їх).
  • seek(position)- перейти до зазначеного зміщення в аналізованому файлі.
  • seek(position, callback)- перейти до зазначеного зміщення, там виконати callback(), потім повернутися до попереднього положення.
  • current- Поточний об'єкт, що піддається аналізу.Використовуйте для доступу до результатів, вже досягнутих під час аналізу.
  • Конструктор jParser:

      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. Це простий приклад аналізу двійкового файлу всередині браузера.

    • tar.html- структура jParser.
    Засіб показу моделей World of Warcraft.Використовує jParser для читання двійкового коду тривимірної моделі, потім WebGL для її відображення.

    • m2.js- структура jParser.
    • model.json - результат аналізу.
    jparser

    Внутрішні файли Diablo 3

    • convert.coffee- структура для jParser. Кофескрипт записувати структуру файлу ще простіше.
    • Приклади оброблених файлів:

    Хардкорна конфа за С++. Ми запрошуємо лише профі.