|
|
Регистрация | Правила форума | FAQ форума | Справка | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |
Программное обеспечение Обсуждение, оптимизация, настройка, решение проблем |
|
Опции темы | Опции просмотра |
01.10.2018, 19:22 | #2 | |||
Забанен
|
9285, Файл в каком формате и файл чего ?
|
|||
01.10.2018, 19:27 | #3 |
Ведущий эксперт: моддинг
|
Если на пальцах, то что-то подобное (если сам массив можно как-то экспортировать) делал я очень давно в том же Dreamviewer с написаниеим правила цикла if и while wend и с добавлением исключений игнорирование определённых паттернов, писал не я, просто программисту объяснил, что мне нужно по такому-то принципу выбора от первого правила до последних чисел, пападающих под условие функции. После чего на выходе я получал маркеры найденных элементов (exit do), чтобы уже их заменить или выборочно поменять.
Нужно искать скриптовика, который бы смог скомпелировать софт с такой функцией, к примеру, можно уточнить это у regist т.к я для его проги, что он сам написал рисовал иконку. |
01.10.2018, 19:40 | #4 | |||
Нарушил правила
|
dark-forse
Если критичен тип файла, то тогда конкретизирую задачу. В NTFS есть битовая карта тома в которой отмечено какие кластера заняты. И там три типа байтов: 00 - восемь кластеров не заняты ничем FF - восемь кластеров заняты хх - любой вариант, отличающийся от вышеуказанных, означающий что какое то количество кластеров из восьми занято. Вот конкретно сейчас мне надо найти самый последний используемый кластер. То есть искать первый байт от конца, отличающийся от 00. Другой вариант. Есть сплошной блок занятых кластеров (FF) - нужно найти первый, отличающийся от FF. По сути, это тот же поиск в любом хекс-редакторе, только с задачей "не равно заданному". |
|||
01.10.2018, 21:54 | #5 |
Супер-Модератор
Эксперт клуба THG | Фото |
9285, И что должно произойти дальше? Программа должна вывести номер байта !=00 OR !=FF ?
Добавлено через 1 минуту Скинь мне пример такого файлика в сжатом виде на почту.
__________________
Ryzen 1700X + Noctua NH-D15 / ASRock AB350 Pro4 / Ballistix 32GB 3066CL16 / Samsung SM951 512GB MLC NVMe + Seagate Barracuda 2TB 7200.14 / ASUS GeForce 9600GT 512MB GDDR3 / Seasonic Prime 650W Titanium / Corsair Graphite 780T (White) Решение проблемы: "В процессе регистрации по e-mail"Последний раз редактировалось Staind, 02.10.2018 в 01:20. |
01.10.2018, 22:26 | #6 | |||
Нарушил правила
|
Staind
Ничего. Эта возможность нужна в разных случаях, но конкретно сейчас для того чтобы определить где находится последний записанный кластер. Оффтоп Пример можешь получить и сам - извлечь $Bitmap с любого тома. Тем не менее - архив в атаче. |
|||
01.10.2018, 22:54 | #7 | |||
Нарушил правила
|
PS. В приложенном файле визуально я нахожу "конец занятого пространства" в строке с адресом 0x17B8B0 но я не уверен что где то до конца файла не имеется какой либо ещё один (или более) байт, отличающийся от 00.
|
|||
02.10.2018, 01:13 | #8 |
Супер-Модератор
Эксперт клуба THG | Фото |
9285, может я чего не так понял или сделал. Только что написал вот такое.
Т.е. скрипт ищет в заданном файле в нашем случае Bitmap.bin значение и выдает последний номер байта, где найдено значение 00 либо FF PS Я не уверен, что правильно понял задачу.
__________________
Ryzen 1700X + Noctua NH-D15 / ASRock AB350 Pro4 / Ballistix 32GB 3066CL16 / Samsung SM951 512GB MLC NVMe + Seagate Barracuda 2TB 7200.14 / ASUS GeForce 9600GT 512MB GDDR3 / Seasonic Prime 650W Titanium / Corsair Graphite 780T (White) Решение проблемы: "В процессе регистрации по e-mail"Последний раз редактировалось Staind, 02.10.2018 в 01:34. |
02.10.2018, 01:46 | #9 | |||
Нарушил правила
|
Staind
Я не программист, и если напишу что что то понял, то обману. Как запустить этот скрипт? Добавлено через 3 минуты Что касается задачи, то она обратная. Применительно к этому файлу, мне надо найти самый первый байт от конца файла, в котором будет что то, отличающееся от 00. Вообще, подобный поиск нужен и при работе с диском. То есть я знаю что есть куча 00, но где то должен быть отличающийся байт - но неизвестно какой. Именно поэтому то и нужен поиск "от обратного" - то есть найти что то, отличающееся от заданного. |
|||
02.10.2018, 02:03 | #10 | |||
Нарушил правила
|
Применительно к примеру - по смещению 0x17B8B6 видим байт 3F а далее идут сплошняком 00.
В битовой карте тома каждый бит отвечает за то занят кластер или нет (0 - свободен, 1 - занят). Можно 3F разложить побитно и определить с точностью до кластера, но в данном случае такая точность некритична. Поэтому считаем что не перезаписанные кластера начинаются с 1554615*8=12436912 |
|||
02.10.2018, 02:36 | #11 |
Супер-Модератор
Эксперт клуба THG | Фото |
1. Надо установить Python (под свою ОС - внизу страницы. Важно - в процессе инсталляции обязательно отметьте птичкой пункт PATH)
2. Сохранить файл со скриптом например в блокноте, потом заменить стандартное расширение *.txt на *.py (я уже создал файл и приложил его к этому сообщению) 3. Разместить этот файл в папке с Bitmap.bin и запустить его. Посмотри что мой скриптик нашел: После запуска мой скрипт находит порядковый номер байта, который содержит либо FF либо 00. Причем поиск происходит начиная с конца файла. В сброшенном тобой примером скрипт нашел то, что я показал вручную на скрине в HEX редакторе. Правильно ли все нашлось?
__________________
Ryzen 1700X + Noctua NH-D15 / ASRock AB350 Pro4 / Ballistix 32GB 3066CL16 / Samsung SM951 512GB MLC NVMe + Seagate Barracuda 2TB 7200.14 / ASUS GeForce 9600GT 512MB GDDR3 / Seasonic Prime 650W Titanium / Corsair Graphite 780T (White) Решение проблемы: "В процессе регистрации по e-mail"Последний раз редактировалось Staind, 02.10.2018 в 02:44. |
02.10.2018, 02:40 | #12 | |||
Консультант VN
|
т.к. работа с HEX то абсолютно без разницы какой там тип.
Насколько понимаю у него на скрине скрипт для питона. Но так как только скрин, то вам наверно надо брать его переписывать со скрина, а потом разбираться с питоном.
Вроде эту задачу можно решить и на VBS (плюс этого решения, что не требуется никаких внешних утилит для запуска скрипта и при необходимости его можно поправить самому как надо). Либо написать и скомпилировать на любом языке - Аутоит, С++ или что кому ближе. просто поправить условие на != |
|||
02.10.2018, 02:44 | #13 | |||
Нарушил правила
|
С Python понятно - но иногда подобные задачки надо решать на клиентском компе и не всегда в работающей системе (чаще всего используется WinPE), поэтому, если не будет варианта hex-редактора, то буду пробовать использовать скрипт.
Нашлось не то. Я же говорю, мне нужно найти байт отличающийся от 00 (последний в файле байт 80 не в счёт). |
|||
02.10.2018, 02:52 | #15 | ||
Супер-Модератор
Эксперт клуба THG | Фото |
Цитата:
Цитата:
2. Отдельный пример Код:
AA AA AA BB CC 00 00 00 00 00 00 80
__________________
Ryzen 1700X + Noctua NH-D15 / ASRock AB350 Pro4 / Ballistix 32GB 3066CL16 / Samsung SM951 512GB MLC NVMe + Seagate Barracuda 2TB 7200.14 / ASUS GeForce 9600GT 512MB GDDR3 / Seasonic Prime 650W Titanium / Corsair Graphite 780T (White) Решение проблемы: "В процессе регистрации по e-mail" |
||
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
Справочник словарей | ||
Словари русского языка - www.gramota.ru | Яndex - Словари | Википедия - ru.wikipedia.org |
|
|
|
|