Лучшие Системные Программы

AIDA64CCleanerES ПроводникSuperSU ProTitanium BackupRoot Explorer

Macro HEX Edit

Опубликовано в Системные утилиты


Macro HEX EditMacro HEX Edit на АндроидРедактор Macro HEX Edit на Андроид


Macro HEX Edit – отличная программа, которая предназначена для отображения и редактирования файлов любого формата и любого размера. В программе вы найдете возможность возможна записи с привилегиями суперпользователя. Доступна работа с символьными метками, что позволит быстрее и проще обращаться к нужным полям в файле известного вам формата. Более того, в состав редактора входит интерпретатор, позволяющий исполнять произвольные скрипты, отображать результат в графическом виде или же вносить изменения в файл (а точнее в буфер изменений редактора, те результат работы всегда можно будет откатить).

Особенности:

  • Полностью настраиваемое отображение, возможность группировки байтов и отображение в HEX/DEC/OCT
  • Поддержка 8 кодировок (ASCII, COI8-R, COI8-U, UTF-8, windows-1251, UTF-16, UTF-16LE, UTF-16BE)
  • Возможность работы в нескольких файлах сразу
  • Работа с символьными метками
  • Макро система дает практически безграничные возможности в поиске/редактировании, а также удобном отображении интересующих данных
  • Возможность создания собственных действий и привязки их к макросам позволит решать любые задачи в один клик
  • Справка на двух языках входит в состав программы

Инструкция


Редактирование

Чтобы приступить к редактированию файла, выделите некий участок, или просто установите "курсор" на нужный вам байт. Можно сделать это и с помощью поиска или диалога символьных меток. Когда будет выделена хотя-бы одна ячейка, появится панель редактирования. С нее вы можете вырезать, копировать или вставить, обрезать файл по позиции курсора (старта выделения) или же просто открыть диалог редактирования. В диалоге редактирования возможно задать как систему счисления, в которой вы зададите значение, так и размерность константы. Вы можете заполнить значениями нужной размерности область выделения. Возможен и откат изменений. Вы можете использовать кнопку Back в action bar, или же аппаратную кнопку назад. Нажатие аппаратной кнопки так же сбрасывает выделение (и прячет панель редактирования).


Поиск

Переход по адресу: просто укажите адрес, по которому хотите перейти или используйте косвенную адресацию (галочка indirect addressing) и укажите размерность адреса в байтах.
Поиск строк: думаю, здесь все понятно. Отмечу лишь, что поиск осуществляется в той кодировке, которая задана в настройках. Поиск далее осуществляется путем включения галочки "After change".
Поиск констант: полагаю, нет необходимости пояснять назначение галочек выбора системы счисления и размера искомой константы. Скажу лишь, что можно использовать также и поиск по шаблону. Неизвестный полубайт при этом задается символом '?', например 80??3344.


Работа с символьными метками

Для работы с метками Hex редактор содержит диалог File structure. Здесь вы можете как создавать метки для конкретного файла (ваши изменения будут запоминаться при закрытии диалога), так и сохранять/открывать шаблоны, которые в дальнейшем можно использовать и для других файлов. Сами метки могут использовать косвенную адресацию, а их размер, адрес, смещение(необходимо там, где адрес считается не с нуля), можно задавать константами или же ссылками на другие метки. Если метка использует косвенную адресацию необходимо задать размер адреса в байтах. Если в качестве значения одного из полей используется метка, обязательно ставьте галочку Label рядом с соответствующим текстовым полем. При необходимости вы можете использовать косвенно-косвенную адресацию, прописав в поле адреса метку, адресуемую косвенно, которая в свою очередь использует косвенную адресацию.
Теперь коротко о том, зачем это нужно. Например, вы можете сделать шаблон для нужного вам формата. Любую метку можно использовать для перехода в самом редакторе или просмотра значения, не закрывая диалог меток. Таким образом любой файл можно представить в виде набора меток, написанных "человеческим" языком и быстро получать необходимые значения как в текущем файле, так и в других файлах того же формата, если вы сохраните шаблон. Для управления метками в диалоге можно использовать Drug&Drop.


Macro actions, создание действий и привязка к скриптам

Диалог предназначен для создания собственных действий. Открывается с панели редактирования. Чтобы создать новое действие, используйте кнопку Create action. В появившимся диалоге вам нужно задать имя действия (это же название будет носить скрипт, запускаемый создаваемым действием), а так же параметры, которые будут передаваться скрипту при использовании действия (значения 2 текстовых полей, адреса начала и конца выделения в редакторе). Любой из параметров можно включить или выключить. В скрипте параметры будут приняты в той же последовательности. Для упрощения редактор сам вклеит необходимые директивы и параметры, если вы будете открывать его из контекстного меню созданного действия.

Используя длинное нажатие на появившемся действии, вы увидите меню, из которого действие можно удалить или же редактировать код скрипта.
При закрытии диалога действий ваши изменения будут сохранены.

Зачем это нужно: стандартный диалог редактирования позволяет лишь заменять значения на выделенном участке. Предположим, вам нужно эти значения инвертировать или наложить маску или... Вообщем, Macro actions в помощь..


Встроенный интерпретатор 


Препроцессор. Комментарии и директивы 

В коде макросов возможно использование комментариев, символ ';' . Пример:

;my comment

Строка 'my comment будет невидима для интерпретатора.

На данный момент поддерживаются 3 директивы. Любая директива начинается с символа '.':
1) .PROGRESS - запускает диалог ожидания на время отработки скрипта.
2) .GLOBAL param [,param1 [,param2][,...]] - используется для получения значений при запуске интерпретатора. Именно через .GLOBAL осуществляется получение значений, передаваемых диалогом Macro actions
3) .EQU str new_str - аналог define в других языках. Подставляет указанную строку(new_str) вместо указанного ключевого слова (str). Может использоваться, например, для изменения ключевых слов интерпретатора


Типы данных, переменные, константы

"Служебные" переменные, инициализирующиеся автоматически

integer SIZE - размер открытого файла. Увеличивается автоматически при записи "за пределы файла". Также вы можете задавать размер текущего открытого файла, изменяя значение SIZE из кода макроса
integer TAB - номер текущей открытой вкладки
string FILE - путь к текущему открытому файлу
string PATH - путь к директории текущего файла

Значение SIZE можно изменять вручную. Значения остальных служебных переменных изменять не рекомендуется. Используйте вызовы setFile, setTab для задания текущего файла/вкладки

 Константы

По умолчанию числовые константы, которые вы используете в коде скрипта - десятичные. Это относится и к диалогам input, а так же Macro action. Задать нужную вам систему счисления можно соответствующей приставкой:

  • 0xXXX - 16
  • 0oXXX - 8
  • 0bXXX - 2

В действиях со строками вы можете использовать строковые константы. Нужная строка заключается в '', например:
'My string'

Также в коде возможно использовать true и false. Фактически это -1/0 соответственно, для красоты оформления, а также на случай изменения стандартных для них значений, рекомендуется использовать именно ключевые слова.

Общие правила инициализации и работы с переменными/массивами

Переменные

Переменные могут быть как локальными, так и глобальными. Чтобы использовать переменную в коде, ее необходимо инициализировать. Пример:
string b
Если переменная имеет тип integer, указывать тип необязательно. То есть переменная инициализируется автоматически, если вы используете в коде операцию присваивания, без предварительного объявления (актуально только для integer):
val=10
Однако для правильности и красоты оформления кода рекомендуется всегда указывать тип при объявлении. Так же при объявлении вы можете сразу использовать операцию присваивания, например:
integer b=10, a=inputVal(), c=(5+7)*7
или
string a='str', b='my'+'str', c=a+b+inputStr()

Массивы

На данный момент возможна работа лишь с одномерными массивами. Как и обычные переменные, массивы могут быть как локальными, так и глобальными. Объявить массив можно двумя способами: 
1) задать его размерность при объявлении:
integerArray arr[4]
2) присвоить объявляемому массиву другой массив/вызов функции, возвращающей массив:
integerArray arr[4]
integerArray arr1=arr
или
integerArray arr1=newIntegerArray(1,2,3,4)

Далее можно обращаться к элементам массива по индексу. Начинается индексация с нуля. Пример:
integerArray arr1=newIntegerArray(1,2,3,4)
integerArray arr2[4]
arr2[0]=1
arr2[1]=2
arr2[2]=3
arr2[3]=4

integer i=0
while i < 4
printVal(arr1[i])
printVal(arr2[i])
i=i+1
done

Индексом (как при объявлении, так и при последующей работе) может служить числовая константа, переменная или арифметическое выражение любой сложности.

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

Типы данных

Типы данных, доступные для использования:
  • 1) integer
  • 2) string
  • 3) integerArray
  • 4) byteArray
  • 5) stringArray
integer - имеет размерность 8 байт, как и адресация в hex редакторе. Тип знаковый, т.е. максимальное значение, которое возможно записать в integer переменную будет 0x7fffffffffffffff.

Каждый элемент массива byteArray имеет размерность 1 байт. Тип беззнаковый, т.е. максимальным значением будет 0xff

Работа с переменными и массивами типа integerArray рассмотрена в предыдущем подразделе. Более подробно о действиях и выражениях разных типов можно прочесть в разделе "Выражения".

Отдельного внимания заслуживает тип byteArray. Элементы массива этого типа можно использовать в любых арифметических выражениях, как и тип integer. Однако для byteArray предусмотрен ряд встроенных функций для работы с массивами байтов(чтение, поиск, запись, ...). Ознакомиться с описаниями встроенных функций вы можете в соответствующем разделе.

Функции. Описания встроенных, объявление и вызовы

Объявление функций

Вы можете объявить процедуру, чтобы вызывать ее в дальнейшем из кода:
function [тип] название_процедуры [[тип ]параметр1, [тип ] параметр2, ...] 
....
[return [значение]]
end function

Принимаемые параметры можно заключать в круглые скобки. На данный момент это необязательно, но для удобства и красоты оформления рекомендуется использовать именно такую запись. Пример объявления функции, возвращающей результат сложения двух числовых значений:
function fun(val, val1)
return val+val1
end function

Так как тип процедуры и принимаемых параметров не указан, по умолчанию он считается числовым. То есть эта запись эквивалентна следующей:
function integer fun(integer val, integer val1)
return val+val1
end function

Если функция должна принимать/возвращать не числовые значения(например, массивы или строки), указывать тип при объявлении обязательно, как и в случае с обычными переменными. Пример строковой функции, выполняющей конкатенацию:
function string fun(string val, string val1)
return val+val1
end function

Вызовы функций

Чтобы вызвать объявленную или встроенную функцию из кода, необходимо использовать следующую запись:
имя_функции([параметр1 [,параметр2 [,...]]])

Круглые скобки при вызове обязательны, даже если вызываемая функция параметров не принимает. Вызовы функций могут использоваться в выражениях. При этом тип вызываемой функции должен соответствовать типу самого выражения. Например:
integer a=5+inputVal()

Описание встроенных функций

Примечание 1: если тип функции/параметра не указан явно, по умолчанию будет integer
Примечание 2: некоторые функции содержат необязательные параметры. В этом случае необязательный параметр заключен в []
Примечание 3: функции, предназначенные для сравнивания строк/массивов, имеют тип integer и возвращают значение, равное true или false
Примечание 4: все функции чтения/записи/поиска в файле имеют аналоги "прямого доступа". Эти функции имеют то же кол-во параметров, что и функции для работы с учетом истории изменений и начинаются с direct - directWriteVal, directFindVal, directReadVal и то же самое для других типов. Не рекомендуется использовать функции прямого доступа для файлов, открытых в редакторе, но рекомендуется для сторонних файлов, открытых вызовом setFile.
Примечание 5: помните, что использование функций рисования/вывода в диалог результата будет приводить к ошибке, если скрипт запускается из Macro action в "не графическом" режиме.

Ввод и отображение данных:
integer inputVal([string header])
printVal(integer param1 [,integer param2])
msgVal(integer param1 [,integer param2])

string inputStr([string header])
printStr(String param1)
msgStr(string param1)

Работа с графикой:
point(x, y)
line(x1, y1, x2, y2)
rect(x1, y1, x2, y2)
circle(x, y, radius)

Функции для создания массивов. Возвращают массив, заполненный полученными значениями. Параметров может приниматься от 0 до бесконечности, а их кол-во определяет размерность полученного массива:
integerArray newIntegerArray([param1 [,param2 [,...]]])
byteeArray newByteArray([param1 [,param2 [,...]]])
stringArray newStringArray([string param1 [,string param2 [,...]]])

Разное:
exit() - прервать выполнение скрипта
sleep(timeout) - Задержка, timeout - время в миллисекундах
integer random() - Рандомное значение

string valToStr(val [,radix]) - перевод значения в строку
integer lenStr(string str) - получение длины строки

Сравнивание строк/байтовых массивов (функции ниже возвращают значение true или false)
integer cmpBytes(byteArray arr1, byteArray arr2, count)
integer cmpStr(string str1, string str2)

Чтение/запись/поиск по файлу с учетом истории изменений:
integer findVal(val, [masc,] start, stop, count)
integer readVal(address, count)
writeVal(val, address, count)

integer findStr(string str, [string encoding,] start, stop)
string readStr([string encoding,] start, count)
writeStr(string str, [string encoding,] start, count)

integer findBytes(byteArray arr, [byteArray masc,] start, stop, count)
byteArray readBytes(addr, count)
writeBytes(byteArray arr, addr, count)

Чтение/запись/поиск с "прямым доступом" к файлу:
integer directFindVal(val, [masc,] start, stop, count)
integer directReadVal(address, count)
directWriteVal(val, address, count)

integer directFindStr(string str, [string encoding,] start, stop)
string directReadStr([string encoding,] start, count)
directWriteStr(string str, [string encoding,] start, count)

integer directFindBytes(byteArray arr, [byteArray masc,] start, stop, count)
byteArray directReadBytes(addr, count)
directWriteBytes(byteArray arr, addr, count)

Взаимодействие с редактором:
select(start, stop) - выделение в редакторе
setTab(tab) - выбрать вкладку под номером tab

Открытие/создание "стороннего" файла
setFile(string path)
createFile(string path)

Выражения

Действия

= присваивание

Строковые:
+ конкатенация

Арифметические:
+ сложение
- вычитание
/ деление
* умножение
| or
& and
^ xor

Логические:
== равно
!= не равно
> больше
< меньше
>= больше либо равно
<= меньше либо равно
| or
& and

Строковые выражения

Для строк возможны операции присваивания и конкатенации(склеивания). Пример:
string str='My ' + 'str'
в переменную str попадет строка 'My str'. В качестве операндов в строковых выражениях могут идти строковые переменные, строковые константы, а также вызовы функций, имеющих тип string.

Арифметические выражения 

Арифметическим выражением является выражение, результатом которого будет любое целочисленное значение. Интерпретатор поддерживает сложные выражения со скобками с любым кол-вом вложенностей. В качестве операндов могут использоваться числовые константы, переменные, а так же вызовы функций. Если выражение содержит константы со знаком '-', их следует заключать в скобки:
a+b*(-1)
Пример выражения с вызовами:
a+b*(inputVal()+inputVal())

Логические выражения

Логическим выражением является выражение, результатом которого всегда будет true или false. Результат логического выражения принимают на входе условия и циклы. Как и для арифметических выражений, возможна операция присваивания результата логического выражения переменной, например:
a=c > d

В качестве операндов при сравнивании в логическом выражении может использоваться не только значение, но и арифметическое выражение любой сложности, со скобками, вызовами функций и тд. Например:
a > c*(d+5)

Если в подобном арифметическом выражении используются операции or/and, необходимо заключать выражение в скобки:
(a & 0xff) == b

Интерпретатор умеет работать и со сложными логическими выражения со скобками, например:
(a > 5 | b > 5) & a < 10

Организация условий и циклов

Цикл с условием:
while условие
...
done

Цикл с постусловием:
do
....
loop условие

Условие:
if условие
....
[else]
....
fi

Под условием подразумевается любое логическое выражение или его результат. Например, простейший цикл с условием будет выглядеть так:
while a < 5
a=a+1
done

Чтобы запустить бесконечный цикл, можно передавать true результат циклу. Вовсе не обязательно писать для этого выражение(например, 1 == 1). Можно использовать следующую запись:
while true
....
done

Для преждевременного выхода из цикла вы можете использовать оператор break, для преждевременного перехода к следующей итерации используется оператор continue. Актуально как для while, так и для do

Пара примеров

Создание скриптов, принимающих параметры

Для принятия параметров введена директива .GLOBAL. После перечисляются параметры. Фактически, при исполнении это будут обычные глобальные переменные, лишь с тем отличием, что при запуске в них попадут значения, которые были переданы. Пример использования:
.GLOBAL val, count, start, stop
stop=stop+1
while start < stop
setVal start, count, val
start=start+count
done

Данный скрипт при запуске заменит значения в выделенной области значением, которое попадет в val, размерностью count. И не стоит забывать о том, что если какой либо параметр не был задан, в переменную по умолчанию запишится 0. Поэтому будте осторожны с запуском таких скриптов из едитора кода, чтобы не уйти в бесконечный цикл. Так же не забывайте, что графические функции (print, point, line, circle, rect) можно применять только при запуске из едитора. Те вызов любой из этих функций в скрипте, исполняемом из Macro action приведет к ошибке. Однако вы можете использовать input и все остальные функции, не связанные с рисованием в таких скриптах.

Распараллеленное исполнение

Вызывая функцию exec вы фактически запускаете еще один thread с интерпретатором, исполняющим скрипт, указанный первым параметром. В тредах так же можно работать с графикой, вызывать инпуты и мессэджи. Можно редактировать файл и делать все то же, что и в основном треде. Ниже я покажу пару простых примеров:
[script1, скрипт, который мы будем запускать руками]
start=0
stop=SIZE
if stop > 10000
stop=10000
fi

count=stop/4

while start < stop
exec 'threadscr', start, start+count
start=start+count
done

[threadscr, второй скрипт, запускаемый из первого]
.GLOBAL start, end
while start < end
; здесь делается что-то полезное
start=start+1
done

То есть из главного скрипта мы запускаем несколько тредов, выполняющих что-то параллельно, при этом каждый будет работать со своим "куском". Теперь другой подход. Все то же самое, но уже в пределах одного скрипта. Сделать это очень просто - вспомним, что если не передавать параметры скрипту при запуске, в .GLOBAL переменные запишутся нули. Вот и будем проверять на ноль, чтобы понять основной это тред или нет:
.GLOBAL thread, start, end

; это будет происходить в "основном треде"
if thread == 0
start=0
stop=SIZE
if stop > 10000
stop=10000
fi

count=stop/4

while start < stop
exec ('script', 1, start, start+count)
start=start+count
done
exit ; после запуска тредов, завершим основной тред
fi

; а здесь пойдет сама обработка, то, что нужно запихать в нити
while start < end
; здесь делается что-то полезное
start=start+1
done

К примеру, так это можно реализовать в пределах одного файла, чтобы не плодить кучу скриптов для одного макроса. В данном случае thread - переменная, которую мы проверяем на ноль, а при вызове exec передаем 1 в качестве соответствующего (первого в данном случае) параметра

Примеры, демонстрирующие возможности и некоторые особенности работы, входят в состав программы (макро редактор->open->examples)


Возможные проблемы и их решение

Программа зависает на стартовом экране (при нажатии open file)

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

su
chmod +x -R путь_к_директории_с_либами


Скачать приложение Macro HEX Edit на Андроид бесплатно вы можете по ссылке ниже.


Разработчик: First Row
Платформа: Android 4.1 и выше
Язык интерфейса: Русский (RUS)
Состояние: Free (Бесплатно)
Root: Не Нужен




СКАЧАТЬ:
Скачать этот файл (Hexedit_v2_5_6.apk)Macro HEX Edit - v2.5.6[Размер файла - 12,2 Mb]2017-12-20 22:16
Доступ по ссылке (plugins/system/oyl/redirect.php?goto=ZgbdAwAH0jAuIAw%2Bv2ZR8y%2FXFqxAn%2BKA%2FFB%2B2JE1KOTKDy74M1If6w%2FwdXC3vEAZ7ZpcdeUpZcD6KDg4v%2F0JH%2BWMK4YUzqyD)Macro HEX Edit[google play]2017-12-20 21:48

Поиск по сайту