Вход

Просмотр полной версии : XTractor



Vitamin
22.02.2012, 17:05
В качестве побочного эффекта разработки ZXTune (http://zxtune.googlecode.com) родилась данная утилита.

Что она делает. Да просто анализирует файлы на входе и для каждого из них строит карту внутреннего содержимого.

Например, простой запуск:


xtractor ../Bugs/v14/K/KRLOVE.TRD


даст на выходе папку с дефолтным именем XTractor со следующим содержимым:


KRLOVE.TRD
KRLOVE.TRD/+0
KRLOVE.TRD/+0/TR-Dos disks image
KRLOVE.TRD/+0/TR-Dos disks image/$Track0
KRLOVE.TRD/+0/TR-Dos disks image/$Track0/+0
KRLOVE.TRD/+0/TR-Dos disks image/SYSTEM.C.C
KRLOVE.TRD/+0/TR-Dos disks image/SYSTEM.C.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/Cr_Love.B
KRLOVE.TRD/+0/TR-Dos disks image/Cr_Love.B/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+499
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+499/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+499/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+4663
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+4663/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+4663/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+13478
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+13478/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+13478/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#10.C/+15865
KRLOVE.TRD/+0/TR-Dos disks image/MAIN.C.C
KRLOVE.TRD/+0/TR-Dos disks image/MAIN.C.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+11008
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+11008/Powerfull Code Decreaser v6.2
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+11008/Powerfull Code Decreaser v6.2/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+6803
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+256
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+256/Powerfull Code Decreaser 6.2
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+256/Powerfull Code Decreaser v6.2/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+10951
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+6912
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+6912/Hrum v3.x
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+6912/Hrum v3.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/boot.B/+14963
KRLOVE.TRD/+0/TR-Dos disks image/DEHRUST.C
KRLOVE.TRD/+0/TR-Dos disks image/DEHRUST.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/Cr_Love.W
KRLOVE.TRD/+0/TR-Dos disks image/Cr_Love.W/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+13827
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+13827/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+13827/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x/+51
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x/+51/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+0/Hrust v1.x/+51/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#14.C/+14750
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+8915
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+8915/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+8915/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+10582
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+10582/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+10582/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+12076
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+12076/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+12076/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#13.C/+16255
KRLOVE.TRD/+0/TR-Dos disks image/$Unallocated
KRLOVE.TRD/+0/TR-Dos disks image/$Unallocated/+0
KRLOVE.TRD/+0/TR-Dos disks image/!screen!
KRLOVE.TRD/+0/TR-Dos disks image/!screen!/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+15636
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+4085
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+4085/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+4085/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+11865
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+11865/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+11865/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+15025
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+15025/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#11.C/+15025/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C/+0/Hrust v1.x/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#16.C/+4527
KRLOVE.TRD/+0/TR-Dos disks image/!music!
KRLOVE.TRD/+0/TR-Dos disks image/!music!/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C/+10058
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C/+0
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C/+0/Hrust v1.x
KRLOVE.TRD/+0/TR-Dos disks image/BANK#12.C/+0/Hrust v1.x/+0


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

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


xtractor --target_dir FullPath --full_source_path ../Bugs/v14/K/KRLOVE.TRD


что даст на выходе вновьсозданную папку FullPath с содержимым:


.._Bugs_v14_K_KRLOVE.TRD/
...
дальнейшее содержимое аналогично папке KRLOVE.TRD из предыдущего примера


Если же на выходе нужен просто список файлов, а не полная иерархия, надо запустить следующим образом:


xtractor --target_dir FlatSubpath --flat_subpath ../Bugs/v14/K/KRLOVE.TRD


что даст на выходе новую папку FlatSubpath с содержимым:


KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+13478_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+15865
KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+4663_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#10.C_+499_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+11865_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+15025_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+15636
KRLOVE.TRD_+0_TR-Dos disks image_BANK#11.C_+4085_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#12.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#12.C_+10058
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+10582_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+12076_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+16255
KRLOVE.TRD_+0_TR-Dos disks image_BANK#13.C_+8915_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#14.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#14.C_+0_Hrust v1.x_+51_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#14.C_+13827_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#14.C_+14750
KRLOVE.TRD_+0_TR-Dos disks image_BANK#16.C_+0_Hrust v1.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_BANK#16.C_+4527
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+0
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+10951
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+11008_Powerfull Code Decreaser v6.2_+0
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+14963
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+256_Powerfull Code Decreaser v6.2_+0
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+6803
KRLOVE.TRD_+0_TR-Dos disks image_boot.B_+6912_Hrum v3.x_+0
KRLOVE.TRD_+0_TR-Dos disks image_Cr_Love.B_+0
KRLOVE.TRD_+0_TR-Dos disks image_Cr_Love.W_+0
KRLOVE.TRD_+0_TR-Dos disks image_DEHRUST.C_+0
KRLOVE.TRD_+0_TR-Dos disks image_MAIN.C.C_+0
KRLOVE.TRD_+0_TR-Dos disks image_!music!_+0
KRLOVE.TRD_+0_TR-Dos disks image_!screen!_+0
KRLOVE.TRD_+0_TR-Dos disks image_SYSTEM.C.C_+0
KRLOVE.TRD_+0_TR-Dos disks image_$Track0_+0
KRLOVE.TRD_+0_TR-Dos disks image_$Unallocated_+0


Поскольку результат может содержать в себе много мусора, предусмотрена пара опций для фильтровки:
--ignore_empty - блоки данных, состоящие из одинаковых байт, сохраняться не будут
--minimal_size N - не сохранять блоки данных с размером, меньшим N (в байтах)

Немного общих слов о возможностях и ограничениях:
- справку по опциям можно получить, запустив "xtractor --help"
- возможен многопоточный анализ
- возможен рекурсивный поиск файлов в папках
- программа еще не до конца оттестирована, так что возможны разного рода глюки
- прогресс не реализован
- анализ терминальных типов блоков (например чиптюнов) пока вырезан

Скачать версию для win64 (http://code.google.com/p/zxtune/downloads/detail?name=xtractor_r1558_windows_x86_64.zip&can=2&q=)
Скачать версию для win32 (http://code.google.com/p/zxtune/downloads/detail?name=xtractor_r1558_windows_x86.zip&can=2&q=)

newart
22.02.2012, 17:20
х64 традиционно не работает (проверил на двух компах).

Vitamin
22.02.2012, 17:21
х64 традиционно не работает (проверил на двух компах).
Традиционный совет обновиться.

Vitamin
21.03.2012, 13:06
Обновление xtractor до версии 1594.

- убраны опции --target_dir,--full_source_path,--flat_subpath
+ вместо них введена одна опция --target-name-template, с помощью которой указывается шаблон результата.
По умолчанию он равен "XTractor/[Filename]/[Subpath]", что полностью соответствует параметрам по умолчанию предыдущей версии.
Допустимые поля в шаблоне можно узнать из встроенного хелпа (запуск с --help).
* пофикшены падения при невозможности создания файлов с запрещенными именами
* ускорено сканирование (раза так в 2- забыл убрать одну пессимизацию :) )
+ добавлен режим сбора статистики без сохранения результата
* новый экспериментальный движок анализа

Скачать версию для win32 (http://code.google.com/p/zxtune/downloads/detail?name=xtractor_r1594_windows_x86.zip&can=2&q=)
Скачать версию для win64 (http://code.google.com/p/zxtune/downloads/detail?name=xtractor_r1594_windows_x86_64.zip&can=2&q=)

Vitamin
10.04.2012, 19:22
Билд 1536:

+ поддержка фильтров. При наличии указанной последовательсности hex чисел в блоках данных они будут сохранены (на самом деле формат сложнее, но мне влом описывать:) )
* пофикшены падения при невозможности открыть или создать файл. Теперь пишется сообщение
* пофикшена неработоспособность 64-битной версии с русскими буквами в именах файлов

Скачать версию для win32 (http://code.google.com/p/zxtune/downloads/detail?name=xtractor_r1636_windows_x86.zip&can=2&q=)
Скачать версию для win64 (http://code.google.com/p/zxtune/downloads/detail?name=xtractor_r1636_windows_x86_64.zip&can=2&q=)

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