Урок №34. Знакомство с отладчиком: виртуальные адреса, опкоды, ассемблерные мнемоники, комментарии


            

Урок №34. Знакомство с отладчиком:
   виртуальные адреса, опкоды, ассемблерные мнемоники, комментарии

Возьму за правило перед каждым уроком напоминать о том, что мы изучили в прошлых уроках. Итак, нам известно, что исполняемые файлы бывают 32- и 64-битными. Мы можем проанализировать их код и определить язык программирования, на котором он написан.

В этом уроке мы поглубже изучим информацию, которую предоставляет отладчик Ollydbg. Для начала откроем в отладчике FaNt0m's Crackme #1 из урока №2 (ссылка на crackme)



Четыре колонки, выделенные красным цветом по периметру, это (слева направо):
1) виртуальный адрес - место в памяти компьютера, куда загружается запущенная вами программа.
2) опкоды (operation code) или машинные коды - инструкции, которые последовательно выполняются после запуска программы. Т.е. в этих цифрах зашифрованы операции сложения, вычитания, деления и умножения, а также указание на адрес в памяти, где содержится информация для обработки. Если необходимо изменить порядок выполнения инструкций, тогда используются условные (выполняются при определённом условии) и безусловные (выполняются в любом случае) переходы.
3) ассемблерные мнемоники - те же самые опкоды, которые отладчик показывает в удобочитаемом виде.
4) комментарии - дополнительная информация, которой соизволил поделиться с нами отладчик.

Обратите внимание на то, что ассемблерные мнемоники и комментарии в разных отладчиках могут незначительно отличаться. На снимке ниже представлено сравнение двух отладчиков - OllyDbg и x64dbg.



Давайте проведём сравнение первых десяти строчек ассемблерных мнемоник, исключив несущественную разницу между строчными и прописными буквами. Отличия будут выделены жирным шрифтом.
  1. совпадает
  2. отличается
    Ollydbg: call <JMP.&KERNEL32.GetModuleHandleA>
    x64dbg: call <JMP.&GetModuleHandleA>
  3. совпадает
  4. отличается
    Ollydbg: call <JMP.&KERNEL32.GetCommandLineA>
    x64dbg: call <JMP.&GetCommandLineA>
  5. совпадает
  6. совпадает
  7. совпадает
  8. совпадает
  9. совпадает
  10. отличается
    Ollydbg: call <00401032>
    x64dbg: call <crackme.sub_401032>
В этом уроке мы встретились с нагромождением пока ещё непонятных слов, букв и цифр. Убедились, что ассемблерные мнемоники разных отладчиков могут незначительно отличаться. И самое важное - научились отличать машинные коды от ассемблерных мнемоник.

            

Страница обновлена 24 апреля 2022 года.