Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Требуется написать функцию на C++, предназначенную для переноса блока кода с одного адреса в другой.

Пример:

SomeAddress : mov eax, 0x4000

SomeAddress + 5 : jmp offset

...

после переноса на другой адрес:

SomeAddress1 : mov eax, 0x4000

SomeAddress1 + 5 : jmp offset1

...

в данном случае меняется offset1.

Таким образом, при переносе кода сохраняется его функциональность. Если операнд представляет из себя смещение от текущей инструкции, то он пересчитывается и т.д.

Надо, чтобы, функция умела обрабатывать как можно большее число инструкций.

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

Можно в качестве основы взять код из Microsoft Detours, файл %ProgramFiles%\Microsoft Research\Detours Express 2.1\src\disasm.cpp (я приложил этот файл).

Нужна поддержка как x86 так и x64.

Собираться должно под Visual C++ 6.0

15 лет назад
Unhandled_Ex
Россия
16 лет в сервисе
Был
6 лет назад