Перенос блока инструкций
Требуется написать функцию на 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