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

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

Перейти к: навигация, поиск

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

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

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

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

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

См. также

Ссылки

Личные инструменты

Served in 0.041 secs.