THG.RU | \"Поиск\" Поиск \"Поиск\" | Новости | Видеокарты | Процессоры | Материнские платы | Мониторы | Аудио/видео | HDD и CD/DVD | Собери сам | Игры | Софт | Домашний ПК


Клуб экспертов THG.ru   

Вернуться   Клуб экспертов THG.ru > Софт > Прикладное программное обеспечение > Программное обеспечение

Регистрация Правила форума FAQ форума Справка Пользователи Поиск Сообщения за день Все разделы прочитаны

Программное обеспечение Обсуждение, оптимизация, настройка, решение проблем

Ответ
 
Опции темы Опции просмотра
Старый 01.10.2018, 18:15   #1
Меню пользователя 9285
Нарушил правила
  
HEX-редактор с возможностью поиска данных "от обратного"

Имеется файл в котором огромный массив тех или иных байтов и нужно найти первый, отличающийся от 00 (или FF).
В чём можно реализовать такую задачу?
9285 вне форума   Ответить с цитированием
Старый 01.10.2018, 18:22   #2
Меню пользователя dark-forse
Супер-модератор
Эксперт Клуба THG | видеокарты
 
Аватар для dark-forse
  
9285, Файл в каком формате и файл чего ?
__________________
I'll be back
dark-forse вне форума   Ответить с цитированием
Старый 01.10.2018, 18:27   #3
Меню пользователя Yolenzo
Ведущий Эксперт клуба THG по моддингу
 
Аватар для Yolenzo
  
Если на пальцах, то что-то подобное (если сам массив можно как-то экспортировать) делал я очень давно в том же Dreamviewer с написаниеим правила цикла if и while wend и с добавлением исключений игнорирование определённых паттернов, писал не я, просто программисту объяснил, что мне нужно по такому-то принципу выбора от первого правила до последних чисел, пападающих под условие функции. После чего на выходе я получал маркеры найденных элементов (exit do), чтобы уже их заменить или выборочно поменять.

Нужно искать скриптовика, который бы смог скомпелировать софт с такой функцией, к примеру, можно уточнить это у regist т.к я для его проги, что он сам написал рисовал иконку.
__________________
Какое-то форумное торнадо
ЗАНИМАЮСЬ СБОРКОЙ КОМПЬЮТЕРОВ — Смотреть примеры
Yolenzo вне форума   Ответить с цитированием
Старый 01.10.2018, 18:40   #4
Меню пользователя 9285
Нарушил правила
  
dark-forse
Если критичен тип файла, то тогда конкретизирую задачу.
В NTFS есть битовая карта тома в которой отмечено какие кластера заняты. И там три типа байтов:
00 - восемь кластеров не заняты ничем
FF - восемь кластеров заняты
хх - любой вариант, отличающийся от вышеуказанных, означающий что какое то количество кластеров из восьми занято.

Вот конкретно сейчас мне надо найти самый последний используемый кластер. То есть искать первый байт от конца, отличающийся от 00.

Другой вариант. Есть сплошной блок занятых кластеров (FF) - нужно найти первый, отличающийся от FF.

По сути, это тот же поиск в любом хекс-редакторе, только с задачей "не равно заданному".
9285 вне форума   Ответить с цитированием
Старый 01.10.2018, 20:54   #5
Меню пользователя Staind
Супер-Модератор
Эксперт клуба THG | Фото
 
Аватар для Staind
  
9285, И что должно произойти дальше? Программа должна вывести номер байта !=00 OR !=FF ?

Добавлено через 1 минуту
Скинь мне пример такого файлика в сжатом виде на почту.
__________________
Ryzen 1700X + Noctua NH-D15 / ASRock AB350 Pro4 / Samsung C-Die 2X8GB 3466Mhz / Samsung SM951 512GB MLC NVMe + Seagate Barracuda 2TB 7200.14 / MSI GTX 1070 Gaming X 8GB / Seasonic Prime 650W Titanium / Corsair Graphite 780T (White)
Решение проблемы: "В процессе регистрации по e-mail"


Последний раз редактировалось Staind, 02.10.2018 в 00:20.
Staind на форуме   Ответить с цитированием
Старый 01.10.2018, 21:26   #6
Меню пользователя 9285
Нарушил правила
  
Staind
Ничего.
Эта возможность нужна в разных случаях, но конкретно сейчас для того чтобы определить где находится последний записанный кластер. Оффтоп
Пример можешь получить и сам - извлечь $Bitmap с любого тома.
Тем не менее - архив в атаче.
Вложения
Тип файла: zip Bitmap.zip (17.1 Кб, 19 просмотров)
9285 вне форума   Ответить с цитированием
Старый 01.10.2018, 21:54   #7
Меню пользователя 9285
Нарушил правила
  
PS. В приложенном файле визуально я нахожу "конец занятого пространства" в строке с адресом 0x17B8B0 но я не уверен что где то до конца файла не имеется какой либо ещё один (или более) байт, отличающийся от 00.
9285 вне форума   Ответить с цитированием
Старый 02.10.2018, 00:13   #8
Меню пользователя Staind
Супер-Модератор
Эксперт клуба THG | Фото
 
Аватар для Staind
  
9285, может я чего не так понял или сделал. Только что написал вот такое.



Т.е. скрипт ищет в заданном файле в нашем случае Bitmap.bin значение и выдает последний номер байта, где найдено значение 00 либо FF

PS
Я не уверен, что правильно понял задачу.
__________________
Ryzen 1700X + Noctua NH-D15 / ASRock AB350 Pro4 / Samsung C-Die 2X8GB 3466Mhz / Samsung SM951 512GB MLC NVMe + Seagate Barracuda 2TB 7200.14 / MSI GTX 1070 Gaming X 8GB / Seasonic Prime 650W Titanium / Corsair Graphite 780T (White)
Решение проблемы: "В процессе регистрации по e-mail"


Последний раз редактировалось Staind, 02.10.2018 в 00:34.
Staind на форуме   Ответить с цитированием
Старый 02.10.2018, 00:46   #9
Меню пользователя 9285
Нарушил правила
  
Staind
Я не программист, и если напишу что что то понял, то обману.
Как запустить этот скрипт?

Добавлено через 3 минуты
Что касается задачи, то она обратная.
Применительно к этому файлу, мне надо найти самый первый байт от конца файла, в котором будет что то, отличающееся от 00.

Вообще, подобный поиск нужен и при работе с диском.
То есть я знаю что есть куча 00, но где то должен быть отличающийся байт - но неизвестно какой. Именно поэтому то и нужен поиск "от обратного" - то есть найти что то, отличающееся от заданного.
9285 вне форума   Ответить с цитированием
Старый 02.10.2018, 01:03   #10
Меню пользователя 9285
Нарушил правила
  
Применительно к примеру - по смещению 0x17B8B6 видим байт 3F а далее идут сплошняком 00.
В битовой карте тома каждый бит отвечает за то занят кластер или нет (0 - свободен, 1 - занят). Можно 3F разложить побитно и определить с точностью до кластера, но в данном случае такая точность некритична. Поэтому считаем что не перезаписанные кластера начинаются с 1554615*8=12436912
Изображения
Тип файла: png bb.PNG (13.4 Кб, 103 просмотров)
9285 вне форума   Ответить с цитированием
Старый 02.10.2018, 01:36   #11
Меню пользователя Staind
Супер-Модератор
Эксперт клуба THG | Фото
 
Аватар для Staind
  
Цитата:
Сообщение от 9285 Посмотреть сообщение
Как запустить этот скрипт?
1. Надо установить Python (под свою ОС - внизу страницы. Важно - в процессе инсталляции обязательно отметьте птичкой пункт PATH)
2. Сохранить файл со скриптом например в блокноте, потом заменить стандартное расширение *.txt на *.py (я уже создал файл и приложил его к этому сообщению)
3. Разместить этот файл в папке с Bitmap.bin и запустить его.

Цитата:
Сообщение от 9285 Посмотреть сообщение
Вообще, подобный поиск нужен и при работе с диском.
Посмотри что мой скриптик нашел:



После запуска мой скрипт находит порядковый номер байта, который содержит либо FF либо 00. Причем поиск происходит начиная с конца файла. В сброшенном тобой примером скрипт нашел то, что я показал вручную на скрине в HEX редакторе.

Правильно ли все нашлось?
Вложения
Тип файла: zip Find_FF00.zip (304 байт, 16 просмотров)
__________________
Ryzen 1700X + Noctua NH-D15 / ASRock AB350 Pro4 / Samsung C-Die 2X8GB 3466Mhz / Samsung SM951 512GB MLC NVMe + Seagate Barracuda 2TB 7200.14 / MSI GTX 1070 Gaming X 8GB / Seasonic Prime 650W Titanium / Corsair Graphite 780T (White)
Решение проблемы: "В процессе регистрации по e-mail"


Последний раз редактировалось Staind, 02.10.2018 в 01:44.
Staind на форуме   Ответить с цитированием
Старый 02.10.2018, 01:40   #12
Меню пользователя regist
Консультант VN
 
Аватар для regist
  
Цитата:
Сообщение от 9285 Посмотреть сообщение
Если критичен тип файла, то тогда конкретизирую задачу.
т.к. работа с HEX то абсолютно без разницы какой там тип.
Цитата:
Сообщение от 9285 Посмотреть сообщение
Как запустить этот скрипт?
Насколько понимаю у него на скрине скрипт для питона. Но так как только скрин, то вам наверно надо брать его переписывать со скрина, а потом разбираться с питоном.
Вроде эту задачу можно решить и на VBS (плюс этого решения, что не требуется никаких внешних утилит для запуска скрипта и при необходимости его можно поправить самому как надо).
Либо написать и скомпилировать на любом языке - Аутоит, С++ или что кому ближе.
Цитата:
Сообщение от 9285 Посмотреть сообщение
Что касается задачи, то она обратная.
просто поправить условие на !=
__________________
regist вне форума   Ответить с цитированием
Старый 02.10.2018, 01:44   #13
Меню пользователя 9285
Нарушил правила
  
С Python понятно - но иногда подобные задачки надо решать на клиентском компе и не всегда в работающей системе (чаще всего используется WinPE), поэтому, если не будет варианта hex-редактора, то буду пробовать использовать скрипт.
Нашлось не то. Я же говорю, мне нужно найти байт отличающийся от 00 (последний в файле байт 80 не в счёт).
9285 вне форума   Ответить с цитированием
Старый 02.10.2018, 01:51   #14
Меню пользователя regist
Консультант VN
 
Аватар для regist
  
9285, а как на вход ему файл собираетесь подавать? Это всегда будет дамп с диска с фиксированным именем?
__________________
regist вне форума   Ответить с цитированием
Старый 02.10.2018, 01:52   #15
Меню пользователя Staind
Супер-Модератор
Эксперт клуба THG | Фото
 
Аватар для Staind
  
Цитата:
Сообщение от 9285 Посмотреть сообщение
С Python понятно - но иногда подобные задачки надо решать на клиентском компе
Для этого скрипт можно скомпилировать в *.ехе тогда можно будет запускать на любой виндовс совместимой машине. При этом не будет необходимости устанавливать сам интерпретатор Пайтона. Все будет работать из коробки.

Цитата:
Сообщение от 9285 Посмотреть сообщение
мне нужно найти байт отличающийся от 00 (последний в файле байт 80 не в счёт).
Т.е. 1. надо искать с конца, но самый последний байт игнорировать.
2. Отдельный пример
Код:
AA AA AA BB CC 00 00 00 00 00 00 80
В этом примере надо чтобы скрипт нашел СС, верно?
__________________
Ryzen 1700X + Noctua NH-D15 / ASRock AB350 Pro4 / Samsung C-Die 2X8GB 3466Mhz / Samsung SM951 512GB MLC NVMe + Seagate Barracuda 2TB 7200.14 / MSI GTX 1070 Gaming X 8GB / Seasonic Prime 650W Titanium / Corsair Graphite 780T (White)
Решение проблемы: "В процессе регистрации по e-mail"

Staind на форуме   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Справочник словарей
Словари русского языка - www.gramota.ru Яndex - Словари Википедия - ru.wikipedia.org

Часовой пояс GMT +4, время: 00:15.


Powered by: vBulletin, ©2000 - 2007, Jelsoft Enterprises Limited.
Перевод: zCarot
Распространение информации возможно только с письменного разрешения администрации издания.

THG.ru ("Русский Tom's Hardware Guide") входит в международную сеть TG Publishing

РЕКЛАМА

Rambler's Top100 Рейтинг@Mail.ru