PDA

Просмотр полной версии : [Include] AMX Assembly - библиотека для работы с виртуальной машиной



VVWVV
21.03.2017, 21:02
Описание

AMX Assembly - коллекция библиотек, позволяющих обеспечить максимальное удобство в оперировании виртуальной машиной. Кроме этого, она также включает собственный дизассемблер, сканер кода и профайлер.


Библиотеки


НазваниеОписание
amxФайл содержит функции для чтения из AMX структуры (https://github.com/Zeex/pawn/blob/master/source/amx/amx.h#L251-L285). Содержит три функции: GetAmxAddress, ReadAmxCell, WriteAmxCell. Для получения адреса в структуре в файле определены смещения к каждому элементу.

amx_baseПозволяет узнать базовый адрес AMX.
amx_headerСодержит большую часть функций из шапки. Используя данную библиотеку, можно получить индекс public-, native-функции с помощью имени или адреса, и наоборот. Более того, есть возможность определить индекс, адрес, название public-переменных. Помимо этого, файл также узнаёт значения структуры AMX (https://github.com/Zeex/pawn/blob/master/source/amx/amx.h#L290-L308).

Помимо получения какой-либо информации, данный файл позволяет создавать собственные перехваты как для native-функций, так и для public-функций.

Пример использования:

main()
{
new idx = GetPublicIndexFromName("Callback");
printf("Id: %d", idx);
}
amx_jitПредоставляет функции для правильной работы с JIT плагином. Данные функции позволяют узнать дополнительную информацию: использование плагина, базовый адрес.
amx_memoryДанный файл содержит функции для доступа к памяти. Из-за использования AMX-инструкций lref/sref появилась (https://github.com/compuphase/pawn/pull/27) возможность получить доступ абсолютно ко всем данным.
asm и asm_macrosБиблиотеки создающие псевдооператор @emit. В первом файле заданы функции для правильной обработки операндов; во втором находятся макросы, очевидно, для создания псевдооператора.
codescanСодержит сканер кода, позволяющий найти необходимый участок кода из указанных инструкций. Помимо нахождения подобных участков, он также может определить значение неизвестного операнда.
disasmОчевидно, что он может дизассемблировать (https://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%B7%D0%B0%D1%81%D1%81%D0%B5%D0%BC%D0%B1%D0%BB%D0%B5%D1%80) файлы. Но, тем не менее, его также можно использовать и в остальном коде (данную библиотеку использует codescan)
dynamic_callПозволяет вызывать абсолютно любые функции: native-, public-функции. Также он обеспечивает вызов функций с помощью sysreqC, sysreqD.

Предостережение: к сожалению, при использовании плагина JIT многие функции данной библиотеки не работают.
frame_infoИнформация о фрейме. Функции данного файла предоставляют информацию о предыдущем фрейме, о фрейме возврата и т.п.
heap_allocПомогает выделить и освободить место в куче. Соответственно содержит функции: HeapAllocBytes, HeapAllocCells, HeapRelease
opcodeФайл с опкодами. Создан из-за несоответствия компиляторов для linux и для windows.
osУзнаёт текущую операционную систему с помощью библиотеки opcode (см. выше).
phys_memoryПозволяет считывать информацию по физическому адресу.
stack_traceДанная библиотека позволяет определить последние n-функций, которые вызвали текущую.


Скачать

Все новые версии хранятся в репозитории на Github: amx_assembly (https://github.com/Zeex/amx_assembly)

Установка:

Скачать библиотеку.
Переместить все библиотеки в папку c другими библиотеками (обычно это "pawno/include")
Подключить в исходном скрипте и скомпилировать.



Авторы библиотек: Zeex, Y_Less.

Статью подготовил: VVWVV (http://pro-pawn.ru/member.php?4348)


Исключительно для pro-pawn.ru
Копирование данной статьи на других ресурсах без разрешения автора запрещено!