ЖУРНАЛ ХАКЕР

ASM - проще некуда

Спецвыпуск Хакер, номер #004, стр. 004-090-1


CJ Pusher (lapkarelief@mail.ru)

Ты думаешь, конечно, что ASM - это привилегия избранных, суперсложная, нереально неземная вещь и что ты не будешь в силах въехать в нее никогда. Не думай так - эту мысль распространили специально некоторые недобросовестные разработчики лицензионного программного обеспечения в целях борьбы с конкурентами и компьютерными (о Боже, как можно произносить это ужасное слово) пиратами (прямо как в средние века - пираты атакуют мирные корабли и, вместо ядер, стреляют из пушек компьютерами - ужас!). ASM на самом деле - белый и пушистый и очень даже приятный. Ты сможешь въехать в его суть с первого или со второго раза. Несколько простых и очень полезных примеров помогут тебе в этом. Все что тебе понадобится - это компьютер, причем только PC (если же у тебя компьютер Макинтош, то его придется выбросить и купить новый PC), программа tasm.exe (можно masm.exe - если ты любишь Microsoft, но это маловероятно), программа tlink.exe (можно link.exe - то же самое, что и для masm'а). Не забудь также перезагрузиться в режиме эмуляции MS-DOS, чтобы избежать неприятностей с повисанием виндов etc.

Пример 1: Хау ту ребут (Kak perezagruzitza)

Otchen prosto. Есть три похода к этой процедуре. Первый: нажать Ctrl+Alt+Del. Если это не помогает, то можно нажать кнопку Reset на корпусе компьютера. И, что называется, "для утонченных натур" есть третий способ - написать прогу, в нашем случае на ASM'е. Сначала тебе придется набить с помощью текстового редактора вот такой файл:

model tiny

.code

org 100h

start:

jmp dword ptr reboot

.data

reboot dw 0ffff0000h

end start

Сохрани этот файл и дай ему расширение asm. Чтобы запустить эту прогу, надо будет этот файл ассемблировать и скомпоновать (не боись, в нашем случае это то же самое, что и "откомпилить"). Ассемблируют все нормальные люди с помощью tasm.exe или masm.exe. Допустим, что у тебя tasm, тогда набери в командной строке команду tasm имя_файла.asm, чтобы его ассемблировать. Если ты все набрал правильно, то в текущем каталоге появится файл с именем исходника, но с расширением obj. Это объектный код нашей проги. Тебе не надо знать, что такое объектный код, для тебя это всего лишь шаг на пути от исходника на ASM'е к exe'шнику или com'у. Получив obj файл, его надо скомпоновать. Это делается с помощью tlink.exe (link.exe). Введи такую команду: tlink /t имя_файла. /t значит, что ты хочешь получить на выходе файл com, а не exe. Если ты все сделал правильно, то появится готовая программа, запустив которую, получишь полный reboot, причем холодный.

Настало время объяснить, как все работает. Первое - ты, наверное, знаешь, как работает твой проц, если нет - то это несложно понять. Вся работа проца заключается в том, что он берет из памяти подряд числа, смотрит, какой команде они соответствуют и, если какой-то соответствуют, он эту команду выполняет. Если число не соответствует никакой команде - проц виснет. То есть в проге на ASM'е ты должен расписать в нужном порядке команды проца, которые ты хочешь, чтобы он выполнил. Теперь представь, что ты только включил комп, чтобы поиграть или залезть в Инет. Как проц будет знать, откуда взять ему самую первую команду для выполнения? Естественно, никак. Просто разработчики компании Intel, когда в очередной раз в дупель упились в баре, за стаканом решили, что проц будет считывать первую после включения команду по некоему адресу. А потом решили в этом адресе поместить BIOS. Таким образом проц включается и сразу же попадает в BIOS, выполняет оттуда команды, которые и делают все то, что делает комп после включения или перезагрузки. Это наталкивает на мысль, что для software перезагрузки надо начать выполнять команды оттуда, откуда их начинает выполнять сам проц. Но как это сделать? Это тоже просто, ведь разработчики компании Intel сделали нам великий подарок - команды перехода. Они заставляют проц выполнять команду, которая лежит в том месте, где ты ему скажешь: по нужному тебе адресу (типа goto в Бейсике). Благодаря им ты можешь запускать весь софт на своем компе и переключаться между приложениями в виндах. А раз так, то чтобы перезагрузить комп, понадобится пирога всего из одной команды - переход туда, где лежит первая команда проца. Именно эту прогу ты только что у себя запустил.

Содержание  Вперед на стр. 004-090-2