Дизассемблер длин

Материал из Seo Wiki - Поисковая Оптимизация и Программирование
Перейти к навигацииПерейти к поиску

Дизассемблер длин — транслятор преобразующий машинный код в его длину; аналог дизассемблера, но вычисляющий только размер команды процессора. Дизассемблер длин рассматривает машинный код процессора только для оценки сколько байт занимает текущая команда и когда начнется следующая. Аналогичный «аппарат» существует в процессоре производя предвыборку команд из памяти и осуществляя конвейеризацию выполняемых команд. Программный Дизассемблер длин необходим для:

  • декодирования инструкций дизассемблером;
  • рекомпиляции прологов функций;
  • быстрого анализа команд программы;

Рекомпиляции прологов функций необходима при перехвате вызовов функций и широко используется в Windows (на всех 32х разрядных процессорах совместимых с i80386).

Для перехвата вызовов к функции подменяются её первые 5 байт на команду «jmp f_ptr_my_func», но для сохранения работоспособности функции необходимо где-то сохранить первые 5 байт оригинальной функции, для этого анализируется размер присутствующих там команд и их назначение.

Нередко приходится сохранять более 5 байт, так как нельзя переносить часть команды (а команды x86 имеют различный формат и размер). Чтобы перенесенные команды сохраняли работоспособность, их рекомпилируют, заменяя на эквивалентные, и завершают командой безусловного перехода на оригинальную функцию (на продолжение кодов). Такой метод перехвата (с подменой пролога функции) называется — перехватом методом слайсинга. Это самый эффективный метод перехвата, требующий хорошего знания ассемблера x86. Примеры дизассемблеров длин можно найти в книге Юань Фэна «Программирование графики для Windows» (дизассемблер длин, представленный там, имеет две ошибки в описании команд x86). Также дизассемблер длин можно найти на сайте wasm.ru

См. также

Ссылки

Если вам нравится SbUP.com Сайт, вы можете поддержать его - BTC: bc1qppjcl3c2cyjazy6lepmrv3fh6ke9mxs7zpfky0 , TRC20 и ещё....