1. Результат - это eax.
2. Eax заполняется перед самым ret.
3. При вызове процедуры высокого уровня портятся регистры. Например, push esp, mov ebp, esp.
4. Выполнить затертые команды до ret? И что ты не влезишь на процедуру следующую? Где ты выиграл в размерах? Что начиная с ret, что до ret?
5. Использовать пустые места? Это время на их поиск и отладку программы, чтоб все учитывалось при патче + связь с высоким уровнем. + кто-то уже занял пустые места своим патчем и игра слетает с катушек.
А теперь мой вариант:
20 строк кода и новая секция. Далее нужно лишь вычислить offset для jmp и заменить команду ret. Переходим в новую сецию. Для заполнения новой секции воспользуемся удобным масмом (а не асмом встроенном в с++). Создаем объектный файл, указываем линкеру путь к этому файлу, описываем процедуру и memcpy записывает нужный нам код в секцию, который мы без труда, без глубокого вникания в опкоды написали на масме. Добавлено:
В общем спор бессмысленный. Каждый останется при своем мнении. Я много чего пробовал и вышепредложенные варианты меня не устроили. Пишу так как удобно и быстрее вот и все. Я исходники выложу, захотите исправляйте в соответствии с вашими взглядами )))))
Страус труп (с) Бьерн
(This post was last modified: 26.02.2010 00:34 by Дьякон.)