P.S Даная статья была взята с xakep.ru, автор которой SerP. Статья будет полезна тем кто собрался изучать или изучает ассемблер. Например мне данная статья помогла сдать экзамен в университете. Так что кто не знает что такое Debug то можно даже не читать Эта статья посвящена работе с стандартным дебаггером системы ДОС. Ты скажешь: «На кой фиг мне это надо мне, крутому перцу?». Представь ситуацию: ты приходишь в компьютерный клуб (интернет-кафе, к другу домой), а там на тачке дисководы сняты, сидюки заклеены, а пакость сделать все же хочется. Естественно, на любом «нормальном» компе нет никаких компиляторов С, ассемблеров… но почти на каждом «нормальном» компе есть ДОС! Да, именно ДОС, и его последователи - Винды всех типов а конкретнее программа DEBUG. Как? Набрать короткую (если времени мало, да и сил жалко), но неприятную программку, сохранить ее на диске и потом запустить, получив моральное удовлетворение. Посмотрим, как это делается, но для начала изучим несколько простых, но весьма полезных команд. Итак, вы запустили программу DEBUG Первая команда –D (dump) <adress>. Эта команда позволяет просмотреть некоторую область памяти, адрес которой задан в параметре <adress> в формате сегмент:смещение. Для начала посмотрим ПЗУ BIOS: -d F000:E000 Здесь вы видите фирму-производителя вашей BIOS. А по адресу: -d F000:EC6C получаем интересную информацию о системе, такую как дата создания БИОС, чипсет… А по данному адресу (0000:046C) находится таймер БИОС. Отчетливо видно, что значения все время меняются. Для программиста удобно просматривать сегменты команд, данных и стека (CS, DS и SS, соответственно). -d DS:0000 Выше мы видим содержимое сегмента данных, т. е. значения определенных переменных. -d CS:100 А тут представлено содержимое сегмента команд, т.е. машинные коды команд, готовых к исполнению. Освоив команды просмотра памяти, впоследствии мы сможем эффективно отлаживать наши программы и просматривать введенный нами код перед исполнением (для нас сейчас это приоритетная задача). Еще одна важная команда -R (register) <register name>, позволяющая просматривать состояние конкретного регистра и изменять его состояние или же сразу перейти к первой выполняемой команде с просмотром всех регистров. -r AX AX 1203 : 0 - В данном фрагменте мы просматриваем регистр АХ и очищаем его (пишем в него 0). Чтобы перейти к первой выполняемой команде (по адресу CS:100): -r AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=3B9A ES=3B9A SS=3B9A CS=3B9A IP=0100 NV UP EI PL NZ NA PO NC 3B9A:0100 E82421 CALL 2227 Третья команда –E (enter) Addres <command list>. Предназначена она для изменения значений в памяти – с помощью нее можно уже вводить команды в машинных кодах. Замечание: при вводе данных сначала пишется младший байт (по младшему адресу), затем – старший (по старшему), т. е. чтобы записать по адресу DS:0000 число 1234h необходимо ввести: -E DS:0000 34 12 Например введем следующее: -E cs:100 B8 34 12 -D CS:100 А с помощью команды U (unassemble) <starting address>, <ending adress> дизассемблируем введенные команды и получим: -U CS:100,102 3B9A:0100 B83412 MOV AX,1234 Таким же образом можно дизассемблировать любой участок памяти, что очень полезно. Но вместо ввода команд на машинном языке, можно воспользоваться встроенным ассемблером программы DEBUG. Для этого существует команда -A (assemble) <adress>. С помощью этой команды вы можете написать уже нормальную программку на ассемблере, выполняющую необходимые действия.: -A 0B3B:0100 mov ax,1234 0B3B:0103 mov ah, 4c 0B3B:0105 int 21 0B3B:0107 А как же теперь сохранить программу на диске? Сначала задается имя файла: -N my_file.com Затем в регистр СХ необходимо поместить размер программы в байтах. Он будет равен разности конечного и начального смещений. Теперь остается только осуществить запись на диск командой W и в результате увидеть записанное количество байтов. В итоге мы получаем программу, готовую к исполнению. Выход осуществляется командой q. Пример: -A 0B3B:0100 mov ax,1234 0B3B:0103 mov ah, 4c 0B3B:0105 int 21 0B3B:0107 -u CS:100, 106 0B3B:0100 B83412 MOV AX,1234 0B3B:0103 B44C MOV AH,4C 0B3B:0105 CD21 INT 21 -r cx CX 0000 :7 -r AX=0000 BX=0000 CX=0007 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0B3B ES=0B3B SS=0B3B CS=0B3B IP=0100 NV UP EI PL NZ NA PO NC 0B3B:0100 B83412 MOV AX,1234 -N my.com -W Запись 00007 байт -q В заключение можно сказать, что данный способ создания программ открывает новые возможности для любителей компьютерных пакостей, приколов, да и просто программистов-любителей – ведь теперь для создания небольших программ, вместо установки компиляторов, можно воспользоваться стандартными средствами системы, а DEBUG входит в поставку во все Винды вплоть до ХР. Я думаю, что это поможет вам веселее провести время за чужим компом, вызывая истинное удивление хозяина (дисков и дискет-то вы не приносили!!!) новыми эффектами работы его оборудования. Успехов, юные любители хакерного экстрима! И ещё добавлю от себя: как можно прикальнутся над чужим компьютерам, просто вводим вот такую команду JMP $ и пользователь до бесконечности будет смотреть на одну и тужу картинку
ничего не заменит книжку "Персональный компьютер IBM PC и операционная система MS-DOS" П.Нортон, 1992 Статья - голимая, как и 90% статей из хакера. без комментариев. автору стоит убиться об стенку с особой жестокостью
Статья может голимая , но сама программа гут, [хотя непонятен дистурктивный прием, изложенный выше] даже хотя бы взять тот факт, что многие работают в Win системах и не знают о существовании отладчика.
Нортона не читал (к сожалению), но Питер Абель рулит кстати о_О FE00:05 PS. - какой ужас. Мне страшно за уровень специалистов. Или ты учишься на секретаршу?
если те "многие" о нем не знают, им и не за чем знать. зы. какой нахер деструктивный прием? ассемблер учите сначала...
Ты наверно только с этой статьи узнал что такое Debug. Но ты решил показать что ты такой умный!!! Всё ясно.
ты, наверное, тоже. кстати в статейке полно бредятины. мне жалко начинающих кодеров, которые прочитали эту статью. например, написано что все винды - последователи ДОСа. Простите, но это относится только к версиям 1.х, 2.х, 3.х, 9х и Me. В них реально есть 16битный код. Но вот все NT-based системы (NT4, 2k, XP, 2k3) полностью 32 битные и ни байта 16битного кода (кроме загрузчика, который 32битным быть не может по определению) нету. Сразу видно, что автор статьи не разбирается в том, о чем пишет, что весьма печально, но очень типично для "Хакера".