ПредишенСледващото

Защо започнах една бира? Да, това е защо: в момента има четири добри новини:

Аз също благодаря на всички, които ми изпрати предложения за работа. Скъпа моя! Нисък поклон пред вас и морето на благодарност.







Ако нямате достъп до мрежата, а след това да ми изпратите имейл с prosboey изпрати специално съобщение или заедно:

Но след писмо от Леонид. Подобни писма са много, така че аз ще отговори на този, който като цяло:

Здравейте, Олег!

Бих искал да направя асемблер, но не знаете откъде да започнете chego.Podskazhi (от нулата); ако има нещо, в електронна форма, а след това, ако не е трудно да се излезе.

С уважение, Леонид.

В програмата на последния брой.

Сега, по отношение на предишната версия. Имахме програма? Да! Тя самата качен в паметта. Т.е. на върха на себе си (горната част на кода). Аз съзнателно ви помоля да го наричаме точно less009.asm. защото Ако програмата открие файл с това име (* .com), той просто излиза с бипканията. Едно от момичетата, които се интересуват от програмиране на Асемблер (да, скъпа моя! В нашите редици има жени, и аз съм много щастлив!), Наречен "дяволи" Програмата работа. Всъщност, нищо сложно в нея. Надявам се да се разбере, че може да направи Assembler необикновени неща в езика на високо ниво (BASIC, C, Pascal), не са на разположение.

; Програмата се пише на мястото на съхранение, където

Предполагам, CS: CSEG, DS: CSEG, ES: CSEG, SS: CSEG

Mov DX, офсетов име_файл; отворете файла

обадете Open_file; с помощта на специални процедури (вж. по-долу).

JC Error_file; Daylight Error_file етикет на провал.

Mov BX, брадва; Запазване на ID на файла и

Mov CX, офсет Finish-100h; Напиши дължината на нашата програма (броя байтове да се чете)

Mov DX, офсетов Започнете; и прочетете файла в паметта,

обадете Close_file; Затваряне на файла чрез специалните процедури (вж. По-долу).

Mov ах, 9; Посочете съобщение за успешното приключване.

Mov DX, офсетов Mess_ok

; Ако даден файл с посоченото име не е намерен (FILE_NAME db "less009.com ', 0), а след това pischim и излизане. (Забележка -. OK)

Open_file Proc; Процедурата за отваряне на файл за четене,

CMP дръжка, 0FFFFh; в която се вижда, ако файлът е отворен,

JNE Quit_open; и ако не е отворена - да го отворите.

ДКД; Задайте флага за носене на 1, желаното

на задържане; за да се потвърди, че отварянето на файла (за JC).

Дръжка ст 0FFFFh

Close_file Proc; процедура файл затваряне,

CMP дръжка, 0FFFFh; при условие, че тя е била отворена.

FILE_NAME db "less009.com", 0

Mess_ok db "Всичко е наред!", 0Ah, 0DH, '$'; 0Ah, 0DH - преход към следващия ред,

; тип writeln или поставя ().

Повече подробности, които считаме принципа на работа на тези програми по-късно.

Повечето от вас са гласували за асемблер обучение, както следва:

бързо DOS, а след това на Windows. Аз вярвам, че това е интересно и това ще бъде по-добре, отколкото просто да се разгледа DOS, или да отидете директно на Windows. По този начин, ние започваме да се научат DOS.

Що се отнася до програмата, която ще напишем паралелно изучаване на асемблер, резултатите са както следва:

1. Norton командващ тип обвивка;

На първо място все още е извън обвивката, но не много напред от вируса.

Днес ние имаме експериментално издание. Нека се опитаме да стане по-бързо тема позиция. Ако има нещо, което не се научи - пишат. Моля, посетете уеб сайта на форума. Напиши за мен. В края на разпределението Нарочно прекарат една анкета.

Какво е вирус? Virus - програма написана, обикновено в комплект (въпреки че има вируси, написани на Pascal, C, и Visual Basic). Самата програма може да се възпроизвежда чрез заразяване на други програми, без участието на един програмист, който се е написал вируса. Как е възможно това? Елементарно!

Напиши вирус в събрание - сладка сделка. По времето, когато аз написах вирусите като резидент (пребивава в паметта) и чуждестранно. Нещо повече, аз написах и антивирусен софтуер (против тяхната вирус, разбира се).

Преди да се обърнат към изучаването на структурата на вируса, бих искал да ви предупреди за наказателната отговорност за разпространението на вируса на програми. Ако пишете на вирус, а след това го пуснете "в светлината", тогава вие ще бъдете в състояние да изпрати в "места не толкова отдалечени" (в българското право); например, на Колима.

Кой пише вируси? Да, всички и разни! На първо място - на програмистите, които току-що научили асемблер и не виждам никаква друга възможност, веднага след като напишете някакъв вирус и да играят шега да си приятел, съсед и т.н. като по този начин се показва. Например, един приятел е голям пън-433, а вие имате - малко "три". И вие сте изгарящо желание на неговия пън "zalomat".

А сега си представете друга ситуация: фирмата Х има конкурент - компанията Y. Как да направите така, че по време на компанията Y да достави една караница? И защо компютрите им не са заразени с вируса "собствено производство", който на определена дата или при такива обстоятелства би изтриване на цялата информация на твърдия диск? Написано вирус, служител на фирма X, а след това (вируса) е вписано в компютъра, за да конкурент. И все пак! Обикновено заразени компютри не са само на фирма Y, но други (служител копирани заразения файл и Pries в дома си, той се копира един и същ файл запознаване и т.н.).







А сега да разгледаме структурата на вируса и как работи. Целта на всичко това - за да ви научи да разпознава вирусите и да разсее страха от тях.

Какво трябва вирус? На първо място - да се определи дали тя е заредена с някой файл или това е първото натоварване (тогава ще се разбере какво е заложено на карта). След това намерете първия наличен файл, да го проверите, ако вече е заразен или не, ако да, тогава се търси следващия, и ако не е, за да го зарази. Всичко това се случва много бързо и почти незабележимо за потребителя.

Колко време отнема на вируса в паметта? Всичко зависи от въображението на програмиста (той иска да прави с лаптоп / файл). Средният размер на вируса - 500 - 600 байта. Въпреки, че има майстори, които вирус взема 100 - 150 байта, а има и такива, при които началното вируса заема 1,5 - 3 кб или повече.

Какво може един вирус? Всичко! Например, за да изтриете всички данни от твърдия диск в 0,5 - 1 секунда (въз основа на FDISK работи), горят монитора, твърд диск физическите щети и дори да убият потребителя (въпреки че не съм виждал все още)! Всичко зависи от въображението на програмиста.

Какво е вирус ще изучаваме? Ще разгледаме nerizedentny вирус заразяване * .com-файлове (най-лесният). Какво ще правим? Мисля, че нищо особено, с изключение на отглеждането и създаването на малко шум за потребителя.

Как да си направим вирус? Нормално:

Предполагам, CS: CSEG, DS: CSEG, ES: CSEG, сс: CSEG

; Ето тялото на вируса.

Т.е. обичайния формат * .com-файл, който вече знаете. Можете да създавате и * .exe файл, обаче, тя ще бъде по-размер.

Мисля, че днес на вируса достатъчно. Особено, защото резултатите от проучванията си, вирусът - това не е нещо, което би искал да подчертае изучаването на асемблер.

Получаване на най-трудната част. Това ще бъде наистина трудно. Кой може да разбере - е истинският герой!

TSR (жител) - програма, която се намира в паметта. Пример за жител на шофьор на мишката, Norton Guide, всички видове антивирусен софтуер, които се погрижат за това прави тази или онази програма и доклад за дейността си на потребителя, и така нататък.

Като правило, TSR трябва да улови една или друга прекъсване, така че програмистът или други програми могат да се отнасят към него. Нека да разгледаме по-подробно за прекъсване (някои сме ги учи в предните издания).

Прекъсване - е един вид процедура (рутинни), която няма име (например, print_string) и номер. Компютърът има 256 различни номера прекъсване. Някои от тях са запазени в BIOS (ROM) на компютъра (например 16 часа; запомнете:? Mov ах, 10h / вътр 16h) или операционна система (MS-DOS, PC-DOS, OS / 2) (например, 21Н: Mov ах, 9 / Mov DX, офсетов String / вътр 21ч).

Въпреки това, нищо не пречи на програмиста да прихване, например, 21h прекъсване, като по този начин се контролира кой какво прави с него.

Ами, например. Дисплей ред:

Mov DX, офсетов Our_string

Our_string db "Hello! $ '

; Представете си, че това е част от нашата манипулатор прекъсване 21h.

; тук минаваме контрол "наистина" 21ч.

Mov DX, офсетов My_string

Ето, ние проверяваме дали функцията линия изход се нарича от екрана (09) или всяка друга. Ако се обадите друга функция (например, 3DH), ние просто се предадат контрола на оригиналния манипулатор.

Какво е прекъсване манипулатор. Тази процедура постоянно (или по време) в паметта, която поема контрола от първите, които правят това, което той иска, а след това предава управлението на оригиналния манипулатор (т.е. процедура, която вече е в памет можете да изтеглите нашия манипулатор). Тя също може да изпълнява някои действия и след това се прехвърля в друга контрола манипулатор и т.н.

Ако нещо не е ясно - не се отчайвайте! Наистина е много трудно! Много скоро всичко ще си дойде на мястото.

Сега е ред на водача (да се чете внимателно описание след запетаята):

Предполагам, CS: CSEG, DS: CSEG, ES: CSEG, сс: CSEG

Иди на първоначалния етикет. Ние ще трябва да се намеси за прекъсване 21Н, и оставете жител на програмата в паметта

; По-долу е всъщност манипулатор прекъсване 21h а (той е резидент). След програмата да, процедура Int_21h_proc ще остане в паметта и ще контролира 09 функция 21h прекъсвания. Той е да бъдем смели.

JMP DWORD PTR CS: [Int_21h_vect]; ако не, Praed към оригиналния манипулатор прекъсване 21h. All. Програмата етикет Ok_09 няма да се върне

Какви са флаговете, които помните? Във всеки случай, нека отново помисли за кратко примера:

Тук, след реда (1) набор / нулиране на флаг е нула. Line (2) проверява дали същата флаг. Ако е настроен, след това командата сравнение е валиден (т.е. AX = 23). Ако не е инсталиран, AX <> (Не е равно на) 23.

Сега обърнете внимание на процедурата по начало Int_21h_proc. Това, което виждаме:

Ние се прекъсне програмата (промяна на нула флаг). Това може да доведе до доста сериозни промени в хода на програмата, която е предизвикала прекъсване 21h. За да направите това, всъщност, ние си запазваме знамената в стека. Надявам се да се разбере, че в прекъсне треньор (в нашия случай - Int_21h_proc) трябва да се съхраняват в регистрите използвани, включително и знамената регистрират.

А сега да разгледаме следния ред:

Тази променлива може да се съхранява двойна дума (D efine D ouble дума - за да определите двойна дума) (четири байта). Не забравяйте, че един 16-битов и е на 2 байта (една дума) (DX, AX, ES, SS, и т.н., но не и AH, DL, BH - това 8-битови регистри, които заемат един байт!).

Ако искаме да се зареди в променлива дума (два байта), тогава ние трябва да го кажа по този начин:

Mov дума PTR Int_21h_vect, брадва

Ако искаме да се зареди един байт, след това да напишете, както следва:

Mov байт PTR Int_21h_vect, ах

Спомням си, че думата - тази дума, а байт - Този байт. Всичко, което изчиства?

Тогава се създаде проста програма, която ще се появи някакъв ред, като се обадите функция 09 21h прекъсва. Така например, по следния начин:

Предполагам, CS: CSEG, DS: CSEG, ES: CSEG, SS: CSEG

Mov DX, офсетов String

String db 'Моята низ. $'

Започнете първата програма N 01. След като се връща дори DOS (като в Norton Commander, DOS Navigator, Далечния и др. Черупка), стартиране на програми N 02. В какво виждате?

Сега стартирайте програмата N 02 в дебъгер. Хайде смело "в" 21h-ти прекъсването. Какво виждаш в момента?

Е, скъпа! Усложнена?

1. Всички прочетете внимателно няколко пъти, но не разбирам.

2. Лош обяснява. "Това стана" на третия ден.

3. "Има" с трудност. Препоръчително е да се обясни по-подробно. И така, всичко е наред.

4. Това е трудно, но интересно. Продължавайте с добрата работа!

5. Всичко е наред! Cool Обяснено!

6. elementarschinu! Бих предпочел да отиде в Windows.

Това е всичко! Shell разгледа следващата седмица (байтове не е достатъчно). Честит програмиране на вас!







Подкрепете проекта - споделете линка, благодаря!