|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Массовое редактирование бинарных фаилов |
|
Массовое редактирование бинарных фаилов
|
Новый участник Сообщения: 34 |
Имеется около 50 ти фаилов, во всех по одному и тому же адресу нужно нужно исправить предположим 1C на 1E т.е. по адресу 0x00000820 1C на 1E.
По подсказке пользователя "Iska" (копать FileOpen(), FileSetPos(), FileWrite(), FileClose()) почитал в справке (встроенной AutoIT) и разобрался, вроде, только со строкой FileOpen, т.е. FileOpen("1.img", 16) , далее я так понимаю что должно быть далее должно быть что то типа FileSetPos ("1.img", 0x00000820, ***); ***- это я не совсем понял, но предполагаю что тут должно быть значение на которое я хочу заменить? и тогда FileWrite мне не нужно (этой командой я смог только добавить в конец фаила свои значения, а не там где мне это нужно =( ). Извиняюсь если непонятно выразился, недавно узнал про AutoIT, а MS-dos знаю не супер отлично, но хочу поправить положение дел. Если кто сможет помочь буду благодарен. |
|
Отправлено: 15:47, 25-11-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата maxd2007:
Функция FileSetPos Функция FileWrite |
|
Отправлено: 18:34, 25-11-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать maxd2007,
Попробуйте примерно так. Local $hFile, $tData, $sFile = @ScriptDir & '\test.bin' ;Создаем бинарный файл $tData = DllStructCreate('byte[256]') For $i = 0 To 255 DllStructSetData($tData, 1, $i, $i + 1) Next $hFile = FileOpen($sFile, 18) FileWrite($hFile, DllStructGetData($tData, 1)) FileClose($hFile) $tData = 0 FileCopy($sFile, $sFile & '.old', 1) ;Меняем со смещением от начала 223 (0x000000DF) значение на -madmasles- $hFile = FileOpen($sFile, 1) FileSetPos($hFile, 0x000000DF, 0) FileWrite($hFile, Chr(0x2D) & Chr(0x6D) & Chr(0x61) & Chr(0x64) & Chr(0x6D) & Chr(0x61) & Chr(0x73) & Chr(0x6C) & Chr(0x65) & Chr(0x73) & Chr(0x2D)) FileClose($hFile) ConsoleWrite(FileGetSize($sFile) & @TAB & StringMid(FileRead($sFile & '.old'), 223, 13) & @LF) ConsoleWrite(FileGetSize($sFile) & @TAB & StringMid(FileRead($sFile), 223, 13) & @LF) |
Последний раз редактировалось madmasles, 25-11-2013 в 21:42. Причина: немного поправил Отправлено: 18:49, 25-11-2013 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать madmasles, Вы его этим «;Create bin file» скорее запутаете
![]() |
Отправлено: 19:37, 25-11-2013 | #4 |
Ветеран Сообщения: 812
|
Профиль | Отправить PM | Цитировать Iska, поправил.
![]() |
|
Отправлено: 21:36, 25-11-2013 | #5 |
Новый участник Сообщения: 34
|
Профиль | Отправить PM | Цитировать Ваш скрипт работает ))), но можно я задам Вам вопросы:
1) $sFile - что это такое? когда я читал документацию то там было написано что это хендл фаилы, но судя по Вашему скрипту похоже что Вы используете его как переменную и вот эта строчка $hFile = FileOpen($sFile, 18) задает ее параметр, так что же такое $hFile? Почему цифра 18? (в документации указана: "16 = Force binary mode (See Remarks)" ). 2) Local $hFile, $tData, $sFile = @ScriptDir & '\test.bin' - эта строчка от части понятна что она создает фаил test.bin в директории рядом со скриптом, но что означаетl $hFile, $tData, $sFile? 3) Я не понял окончания: ConsoleWrite(FileGetSize($sFile) & @TAB & StringMid(FileRead($sFile & '.old'), 223, 13) & @LF) ConsoleWrite(FileGetSize($sFile) & @TAB & StringMid(FileRead($sFile), 223, 13) & @LF) Я понимаю что напрягаю нубскими вопросами, но если будет время и возможность буду признателен за пояснения. |
Отправлено: 17:42, 26-11-2013 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата maxd2007:
Цитата maxd2007:
Цитата maxd2007:
Цитата maxd2007:
Цитата:
Цитата maxd2007:
Цитата maxd2007:
|
|||||||
Отправлено: 21:40, 26-11-2013 | #7 |
Новый участник Сообщения: 34
|
Профиль | Отправить PM | Цитировать Еще раз спасибо, можно уточнить некоторые моменты:
1) Local $hFile, $tData, $sFile = @ScriptDir & '\test.bin' т.е. это получается что если в скрипте где то указано $hFile или $tData или $sFile то это будет значить обращение в фаилу test.bin в директории рядом со скриптом? 2) В этой строчке: ConsoleWrite(FileGetSize($sFile) & @TAB & StringMid(FileRead($sFile & '.old'), 223, 13) & @LF) ConsoleWrite(FileGetSize($sFile) & @TAB & StringMid(FileRead($sFile), 223, 13) & @LF) я не понял зачем она и что она делает, ведь работа с фаилом заканчивается здесь: $hFile = FileOpen($sFile, 1) FileSetPos($hFile, 0x000000DF, 0) FileWrite($hFile, Chr(0x2D) & Chr(0x6D) & Chr(0x61) & Chr(0x64) & Chr(0x6D) & Chr(0x61) & Chr(0x73) & Chr(0x6C) & Chr(0x65) & Chr(0x73) & Chr(0x2D)) FileClose($hFile) |
Отправлено: 17:31, 27-11-2013 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата maxd2007:
Эту строку можно было бы записать и так: Инструкция Local описывает, объявляет переменные. Какое значение конкретная переменная примет — определяется только в момент присвоения ей конкретного значения, будь то одновременно с её объявлением: либо позже по тексту скрипта, как во втором примере: Цитата maxd2007:
|
||
Отправлено: 18:16, 27-11-2013 | #9 |
Старожил Сообщения: 254
|
Профиль | Отправить PM | Цитировать maxd2007, вы приводите тексты описаний из англ. справки. Если вы новичок, хочу чтобы не прошло мимо наличие русской справки
|
Отправлено: 19:02, 28-11-2013 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] батник для перемещения фаилов | erufa | Скриптовые языки администрирования Windows | 2 | 24-01-2012 14:59 | |
Редактирование бинарных файлов | varaksino | Программирование и базы данных | 8 | 11-08-2011 23:01 | |
CMD/BAT - Резервное копирование фаилов вопрос | deadiwe | Скриптовые языки администрирования Windows | 3 | 18-05-2011 13:42 | |
Редактирование бинарных файлов (NTLDR) | Dr.Dark | Автоматическая установка Windows 2000/XP/2003 | 4 | 27-01-2010 21:25 | |
Алгоритм сравнения бинарных файлов | Savant | Программирование и базы данных | 2 | 04-05-2005 09:57 |
|