Берсеркер
2326 постов
Карма: 217
#11 09 мая 2009 в 12:11
Если интересно расскажу, откуда завелась манера завершать программы через RET. &nbsp;:)<br />Правильности нижеизложенного к EXE файлам не гарантирую, но для COM программ это будет верно:<br />DOS, запуская на выполнение программу, предварительно пишет в стек адрес, указывающий на команду INT 20h (только для COM). Эти два байта являлись частью программного префикса, первых 256 (0100h) байт в кодовом сегменте COM программы. Область называется, если склероз не подводит - PSP (Кстати, в этой области также находится командная строка, параметры, передаваемые программе, кажется адрес 80h). Некоторые старые вирусы могли подменять в стеке адрес на ссылку на свой код. Уже этот факт компрометирует сомнительную экономию в 1 байт &nbsp;:D на размере программы. Еще не стоит сбрасывать со счетов возможность порчи стека или подмены тех пары байт CD 20 (int 20h)...<br />
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
UAC
833 постов
Карма: 27
#12 09 мая 2009 в 12:19
Берсеркер<br />Мне это действительно интересно, я не привык работать по принципу &quot;черного ящика&quot;&nbsp; :) <br />Теперь малость проясняется. <br /><br />Отладчик как правило прыгает на INT 2?h после выполнения ret в главной процедуре, но как видно из вышесказанного - лучше подстраховаться, и включить эти инструкции непосредственно в код программы.
Берсеркер
2326 постов
Карма: 217
#13 09 мая 2009 в 12:28
::) <br />славное было время, интересное...<br />Даже как-то освоил метод получения &quot;чистого&quot; адреса INT 21h (адрес операционки DOS, а не первого попавшегося резидента - антивирусный монитор, либо сам вирус, либо драйвер какой или шпион). Способ подглядел в знаменитом когда-то вирусе Yankee Dodle Dandy&nbsp; ;)<br />Так же писал генератор полиморфного расшифровщика - основа полиморфного вируса,&nbsp; аппаратную защиту от отладчиков (на базе пошагового прерывания CPU - Int 1),&nbsp; код использования четвертой страницы видеопамяти в текстовом режиме под буфер, stealth-алгоритмы...&nbsp; &nbsp; Всё, молчу... а то научу как написать жуткий вирус&nbsp; ;D&nbsp; Честно говоря это интересно, но уже не актуально&nbsp; ::)
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
UAC
833 постов
Карма: 27
#14 09 мая 2009 в 12:30
;D<br /><br />Значит, если я включаю <br />MOV AH, 4Ch<br />MOV AL, errorlevel code<br />INT 21h<br />в программу то<br />ненужно делать в начале главной процедуры <br />PUSH DS<br />MOV AX, 0<br />PUSH AX<br />?
Берсеркер
2326 постов
Карма: 217
#15 09 мая 2009 в 12:36
хм, т.е. хочешь сказать что эти команды были для того чтоб выполнить ret ?<br />Чистый ret юзает только адрес в пределах текущего кодового сегмента.<br />ret far - берет также и сегмент.<br />Значит у тебя была ошибка (несущественная ибо не вызывает крэш).<br />Адрес возврата в ось = DS:0000 ?&nbsp; &nbsp;Хм.... а разве не CS ?&nbsp; Ну тут я могу ошибваться...<br />Если так, то да, пару пушей в начале проги убей, замени на человеческий 4c00/int 21
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
UAC
833 постов
Карма: 27
#16 09 мая 2009 в 12:40
Берсеркер<br />Да, на лекции сказали что DS:0000 это адрес возврата управления операционной системе (ДОС?)<br /> :)
Берсеркер
2326 постов
Карма: 217
#17 09 мая 2009 в 12:42
считай командный процессор CMD в NT - эмулятором DOS&nbsp; :)<br />Вернее будет - сервис NTVDM
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
UAC
833 постов
Карма: 27
#18 09 мая 2009 в 12:43
Берсеркер<br />Я щас в Виста х64, тут всё даже сложнее&nbsp; ;D <br />ДОС-бокс (debugger version)
Берсеркер
2326 постов
Карма: 217
#19 09 мая 2009 в 12:45
ха! это уже интересно!<br />помнится что в XP64 невозможно выполнить 16-битный код.<br />В Висте64 уже можно??
Машина несла меня через неведомые районы Галактики сквозь пространство математической реальности быстрее скорости света. (C) Фред Саберхаген.
UAC
833 постов
Карма: 27
#20 09 мая 2009 в 12:47
Берсеркер<br />Нет, юзаю эмулятор DOS box. Гемор. Он хреново эмулирует те же отладчики.