Программирование в машинных кодах или soft-ice как logger

       

фиктивная точка останова позволяет использовать ключевое слово IF


Естественно, независимо от того сработает ли точка останова или нет, нам необходимо восстановить регистр EAX (про флаги мы помним, но не сохраняем их, чтобы не загромождать код), вернуть кусок оригинальной программы на место и удалить фиктивную точку, поскольку количество точек останова не безгранично. Что касается регистра EAX, то он может быть восстановлен командой POP EAX, следующей за CALL EAX, а вернуть программу на место поможет конструкция 'M ESP-20 L 10 EIP-9'. Откуда взялось 'EIP-9'? Прочему не EIP? Так ведь в процессе выполнения "заплатки" значение EIP

изменилось! Число "9" и есть размер нашей заплатки вместе с командой POP EAX. Остается сказать "R EIP = EIP-9", чтобы вернуть EIP на место и выполнение отлаживаемой программы можно смело продолжать. Если все было сделано правильно и никакой защитный механизм не использовал незадействованный стек, отлаживаемая программа не рухнет.

Кстати говоря, под Windows 9x с некоторой вероятностью сбои все-таки будут происходить, поскольку она активно мусорит в стеке и чтобы не дать ей хулиганить, регистр ESP следует на время выполнения всех операций подтянуть наверх, а затем снова опустить назад.

Естественно, необязательно каждый раз набивать машинные коды вручную. Занятие это утомительное и приятным его никак не назовешь. Вот тут-то нам и пригодятся макросы! Говорим 'MACRO MACRO_NAME = "xxxxx"' и заносим макрос в список постоянных. Это делается так: запускам Symbol Loader, заходим в Edit à Soft-Ice Initialization Setting, переходим к вкладке "Macro Definitions", нажимаем "Add", даем макросу имя (name) и тело (definition). Теперь, макрос будет автоматически загружаться вместе с soft-ice. Можно создать библиотеку собственных расширенных условных точек останова, поддерживающих таких функции поиска подстроки в строке или сравнения строк по шаблонам '*' и '?'. Это действительно можно сделать и тогда мощь soft-ice многократно возрастет, кроме того, мы получим замечательный шанс попрактиковаться программированию в машинных кодах!

Кстати говоря, макросы позволяют решить и другую проблему. Дело в том, что soft-ice не поддерживает вложенные точки останова, без которых нам никак не обойтись (как мы помним, для анализа содержимого регистра EAX нам пришлось прибегнуть к созданию фиктивной точки останова). Если мы попытаемся написать: 'BPX CreateFileA DO "xxx; bpx EIP DO "XXXX"; x;"' ничего не получится! Soft-ice запутается в кавычках и откажется переваривать такую конструкцию. Но если оформить 'bpx EIP DO "XXXX"' в виде макроса, названного, например, XYZ, то конструкция 'BPX CreateFileA DO "xxx; XYZ; x;"' будет воспринята отладчиком вполне благосклонно.



Содержание раздела