CSEG segment assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG org 100h Start: jmp Init Int_21_proc proc cmp ah,9 je ok_9 jmp dword ptr cs:[Int_21_vect] ok_9: push ds push dx push cs pop ds mov dx,offset My_string pushf call dword ptr cs:[Int_21_vect] pop dx pop ds iret Int_21_vect dd 0 My_string db 'Моя строка$' Int_21_proc endp Init: mov ah,35h mov al,21h int 21h mov word ptr Int_21_vect,bx mov word ptr Int_21_vect+2,es mov ax,2521h mov dx,offset Int_21_proc int 21h mov dx,offset Init int 27h CSEG ends end Start ;Это листинг простейшего ком вируса из рассылки Калашникова! Я все понял кроме: почему в процедуре резидента ;оригинальный обработчик прерывания 21h вызывается из адреса cs:[Int_21_vect]? Ведь его адрес то мы ложим в ;смещение Int_21_vect, и сегмент в Int_21_vect+2! Откуда там взялось CS?
Большая просьба пожалуйста помогать, а не критиковать нулевого новичка у которого нет ничего кроме желания изучать!!!
по поводу CS... надо читать про способы адресации Это ком-прога, как ты сказал. Значит, все в одном сегменте. На который указывают CS, DS, ES, SS. Сначала сегмент и смещение оригинального обработчика сохраняются. КУДА? в наш сегмент, в смещение Int_21_vect. То есть CS:Int_21_vect - два слова, смещение и сегмент старого обработчика. Чтобы сделать потом переход туда, используется call dword ptr cs:[Int_21_vect] - что означает, взять двойное слово по адресу cs:[Int_21_vect], и его содержимое использовать как пару сегмент-смещение.
Прерывание 35h функции ax,3521 сохраняет в регистры es:bx адрес (вектор) оригинального обработчика прерывания 21h, которые мы потом пересохраняем в смещение [int_21_vect] и [int_21_vect+2]. Почему же мы вызываем оригинальный обработчик коммандой call dword ptr cs:[int_21_vect], когда он находится в [int_21_vect+2]:[int_21_vect]? Т.е. почему мы не пишем что-то типа call dword ptr [int_21_vect+2]:[int_21_vect]? Почему у нас вместо [int_21_vect+2] мы вставляем cs? То что в ком файлах все в одном сегменте я понимаю!
Ст. 273 УК РФ: Создание, использование и распространение вредоносных программ для ЭВМ... наказываются лишением свободы на срок от трех до семи лет. Ст. 361 УК Украины: распространение компьютерного вируса... наказывается... лишением свободы на срок от трех до пяти лет. Ст. 353 УК песпублики Беларусь: Статья 354. Разработка, использование либо распространение вредоносных программ... наказываются лишением свободы на срок от трех до десяти лет. Вы не боитесь, что вас посадят? )))
такое ощущенье что новичек сразу ринулся писать прогаммы, да не просто проргаммы, а вирусы -- видимо старшая сестра запаролила компьютер и удалила порнуху хехе, надо ей насолить да ыхых. или мы имеем дело со студентом халявщиком ыхых. которые прибегают и просят взрослых дяденек сдеалть им лабу забесплатно, правда не показывая виду что лаба -- это лаба. типо я сам изучаю хехе.
и да, багун08. если и правда есть желание изучать асм, то выкиньте калашникова на помойку. сразу. и избегайте юрова, пирогова и зубкова. накуривайтесь абелем лучше и только им.
Да новичок, но новичок, который, не имея никакого отношения к программированию, в свободное время как то по крупицам пытается изучить то, о чем давно мечтал! Я НЕ ПИШУ ВИРУСЫ, я просто изучаю ассемблер, у вАС попросил помощи в разборе такой простой для вАС задачи, так называемые воины дзена! Я думал, что форумы это то место где опытные что-то объясняют новичкам! Вместо помощи кучу помоев мне на голову, большое спасибо! Чем так помогать лучше молчать! А тебе Guru_of_Zen хочу сказать, что мне 35 лет, я уже большой дядя с 2-мя детьми, а сестры у меня никогда не было!
Пойми, я сначала хочу освоить Дос, а уж потом Win! Я хочу постепенно планомерно все изучать! И зачем ты мне второй раз эту ссылку кидаешь! Не хочу я вирусы писать! Объясни хоть как, своими словами и все!
bagun08 а что сразу не с ZxSpectrum? http://www.wasm.ru/page.php?page=neophyte и не хочу обидеть, но у Вас какие то дефекты в понимании советов. зайдите на сайт и изучайте что душе угодно, материала на нём Вам на 20 лет хватит
call dword ptr cs:[Int_21_vect] загружает в cs значение по адресу Int_21_vect+2, так что после это "синонимы"
sl0n читал я ево... имхо чтобы по юрову учиться, надо обкладываться еще хз скольким кол-вом литературы. ибо у юрова в каждой главе вводятся новые и новые термины, про половину из которых написано примерно следующее: "это мы рассмотрим в главе ххх, а пока вам надо просто сие запомнить". читая юрова, в какой-то момент просто перестаешь понимать, что ты тут вообще делаешь, ибо несистематизировано нихрена. Слон, неужели ничего параллельно с Йуровым не читале?
Ну, я думаю, выражение cs:[Int_21_vect] можно было бы записать просто [Int_21_vect]. Просто синтаксис ассемблера не позволяет (наверное). Если бы было записано jmp dword ptr [Int_21_vect], вопрос бы отпал? Происходит тут переход по адресу [Int_21_vect+2]:[Int_21_vect]. Так понятно?