label Referate autorenew 2025-09-29, 16:56 history_edu Claudia Patru
;79 Sa se scrie programul care realizeaza modificarea datelor de definire ale unui fisier existente n eticheta acestuia.;programul modifica semnatura si valorile registrilor SS,SP,IP,CS.model small.286.stack 10h.datadoiOcteti db ' $' ;citim cate 2 octeti; The first 28 (1C hex) bytes of an EXE header are formatted as follows.; Offset Description; 00h Signature (always 'MZ')rwSignature db '00$'ms1 db 10,13,'-> Citim semnatura: ','$'ms2 db 10,13,'-> Rescriem semnatura$'; 02h Number of bytes in last 512-byte pagemb1 db 10,13,'-> Citim numarul de bytes din ultima pagina (dimensiunea unei pagini este de 512 bytes): ','$'; 04h Total number of 512-byte pages required to hold filemp1 db 10,13,'-> Citim numarul de pagini (de dimensiune 512 bytes) necesar pentru a memora fisierul: ','$'; 06h Number of entries in relocation tableme1 db 10,13,'-> Citim numarul de intrari in tabela de relocation: ','$'; 08h Size of the EXE header, in paragraphsmes1 db 10,13,'-> Citim dimensiunea headerului EXE, in paragraphs: ','$'; 0Ah Minimum memory required above load image, in paragraphsmMem1 db 10,13,'-> Citim memoria minima ceruta, in paragraphs: ','$'; 0Ch Maximum memory to allocate (in paragraphs, often 0FFFFh)mMem2 db 10,13,'-> Citim memoria maxima ceruta, in paragraphs: ','$'; 0Eh Pre-relocation SS register valuemss1 db 10,13,'-> Citim valoarea registrului SS (pre-relocation): ','$'mss2 db 10,13,'-> Rescriem valoarea registrului SS (pre-relocation) ','$'rwSS db '11$'; 10h Initial SP register value (normally equal to stack size)msp1 db 10,13,'-> Citim valoarea registrului SP: ','$'msp2 db 10,13,'-> Rescriem valoarea registrului SP ','$'rwSP db '22$'; 12h Negative checksum (ignored by DOS)mns1 db 10,13,'-> Citim negative checksum (ignorata de DOS): ','$'; 14h Initial IP register valuemip1 db 10,13,'-> Citim valoarea registrului IP: ','$'mip2 db 10,13,'-> Rescriem valoarea registrului IP ','$'rwIP db '33$'; 16h Pre-relocation CS register valuemcs1 db 10,13,'-> Citim valoarea registrului CS (pre-relocation): ','$'mcs2 db 10,13,'-> Rescriem valoarea registrului CS (pre-relocation) ','$'rwCS db '44$'; 18h Relocation table offset into headermto1 db 10,13,'-> Citim offsetul tabelei relocation in header: ','$'; 1Ah Overlay numbermon1 db 10,13,'-> Citim overlay number: ','$';variabile pentru lucrul cu fisierehandler dw ?atribut dw ?tipDeschidere db 2numeFisier db 'td.exe',0NrOctetiScrisi dw ?NrOctetiCititi dw ?NrOctetideScris dw ?PozitieCurenta dd ?SaltPozitie dd ?buffer db ' $'rez dw ? ;verifica executia fara erori a functiilormesaj db 10,13,'Eroare executie program!','$'mesaj2 db 'EOF!','$'msStr db 10,13,'Primii 28 bytes ai fisiereului exe deschis in aplicatie sunt:',10,13,'$'offset_buffer dw ?dim_header equ 28.codeinclude macrofis.incmov ax,@datamov ds,ax;==========================================================================;DESCHIDEM FISIERUL;==========================================================================Deschidere numeFisier, 2, handler, rezcmp rez,0jz continua1jmp eroarecontinua1:mov ax,0900hlea dx,msStrint 21hmov cx,1chrepeta:Citeste handler, buffer, 1, NrOctetiCititi,rezcmp rez,0jz continualoopjmp eroarecontinualoop:mov ax,0900hlea dx,bufferint 21hloop repeta;==========================================================================; 00h Signature (always 'MZ');==========================================================================mov word ptr SaltPozitie,0mov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continuaxjmp eroarecontinuax:mov ax,0900hlea dx,ms1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua2jmp eroarecontinua2:mov ax,0900hlea dx,doiOctetiint 21hmov word ptr SaltPozitie,0mov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua3jmp eroarecontinua3:mov ax,0900hlea dx,ms2int 21hmov bx, offset rwSignaturemov offset_buffer,bxScrie handler, offset_buffer, 2, NrOctetiScrisi, rezcmp rez,0jz continua4jmp eroarecontinua4:mov word ptr SaltPozitie,0mov word ptr SaltPozitie+2,0;referinta este 1 => fata de pozitia curentaPozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua5jmp eroarecontinua5:mov ax,0900hlea dx,ms1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua6jmp eroarecontinua6:mov ax,0900hlea dx,doiOctetiint 21h;==========================================================================; 02h Number of bytes in last 512-byte page;==========================================================================continua12:mov word ptr SaltPozitie,02hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua22jmp eroarecontinua22:mov ax,0900hlea dx,mb1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua32jmp eroarecontinua32:mov ax,0900hlea dx, doiOctetiint 21h;==========================================================================; 04h Total number of 512-byte pages required to hold file;==========================================================================continua13:mov word ptr SaltPozitie,04hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua23jmp eroarecontinua23:mov ax,0900hlea dx,mp1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua33jmp eroarecontinua33:mov ax,0900hlea dx, doiOctetiint 21h;==========================================================================; 06h Number of entries in relocation table;==========================================================================continua14:mov word ptr SaltPozitie,06hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua24jmp eroarecontinua24:mov ax,0900hlea dx,me1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua34jmp eroarecontinua34:mov ax,0900hlea dx, doiOctetiint 21h;==========================================================================; 08h Size of the EXE header, in paragraphs;==========================================================================continua15:mov word ptr SaltPozitie,08hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua25jmp eroarecontinua25:mov ax,0900hlea dx,mes1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua35jmp eroarecontinua35:mov ax,0900hlea dx, doiOctetiint 21h;==========================================================================; 0Ah Minimum memory required above load image, in paragraphs;==========================================================================continua16:mov word ptr SaltPozitie,0Ahmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua26jmp eroarecontinua26:mov ax,0900hlea dx,mMem1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua36jmp eroarecontinua36:mov ax,0900hlea dx, doiOctetiint 21h;==========================================================================; 0Ch Maximum memory to allocate (in paragraphs, often 0FFFFh);==========================================================================continua17:mov word ptr SaltPozitie,0Chmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua27jmp eroarecontinua27:mov ax,0900hlea dx,mMem2int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua37jmp eroarecontinua37:mov ax,0900hlea dx, doiOctetiint 21h;==========================================================================; 0Eh Pre-relocation SS register value;==========================================================================continua18:mov word ptr SaltPozitie,0Ehmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua28jmp eroarecontinua28:mov ax,0900hlea dx,mss1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua38jmp eroarecontinua38:mov ax,0900hlea dx, doiOctetiint 21hcontinua48:mov word ptr SaltPozitie,0Ehmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua58jmp eroarecontinua58:mov ax,0900hlea dx,mss2int 21hmov bx, offset rwSSmov offset_buffer,bxScrie handler, offset_buffer, 2, NrOctetiScrisi, rezcmp rez,0jz continua68jmp eroarecontinua68:mov word ptr SaltPozitie,0Ehmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua78jmp eroarecontinua78:mov ax,0900hlea dx,mss1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua88jmp eroarecontinua88:mov ax,0900hlea dx,doiOctetiint 21h;==========================================================================; 10h Initial SP register value (normally equal to stack size);==========================================================================continua19:mov word ptr SaltPozitie,10hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua29jmp eroarecontinua29:mov ax,0900hlea dx,msp1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua39jmp eroarecontinua39:mov ax,0900hlea dx, doiOctetiint 21hcontinua49:mov word ptr SaltPozitie,10hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua59jmp eroarecontinua59:mov ax,0900hlea dx,msp2int 21hmov bx, offset rwSPmov offset_buffer,bxScrie handler, offset_buffer, 2, NrOctetiScrisi, rezcmp rez,0jz continua69jmp eroarecontinua69:mov word ptr SaltPozitie,10hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua79jmp eroarecontinua79:mov ax,0900hlea dx,msp1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua89jmp eroarecontinua89:mov ax,0900hlea dx,doiOctetiint 21h;==========================================================================; 12h Negative checksum (ignored by DOS);==========================================================================continua110:mov word ptr SaltPozitie,12hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua210jmp eroarecontinua210:mov ax,0900hlea dx,mns1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua310jmp eroarecontinua310:mov ax,0900hlea dx, doiOctetiint 21h;==========================================================================; 14h Initial IP register value;==========================================================================continua111:mov word ptr SaltPozitie,14hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua211jmp eroarecontinua211:mov ax,0900hlea dx,mip1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua311jmp eroarecontinua311:mov ax,0900hlea dx, doiOctetiint 21hcontinua411:mov word ptr SaltPozitie,14hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua511jmp eroarecontinua511:mov ax,0900hlea dx,mip2int 21hmov bx, offset rwIPmov offset_buffer,bxScrie handler, offset_buffer, 2, NrOctetiScrisi, rezcmp rez,0jz continua611jmp eroarecontinua611:mov word ptr SaltPozitie,14hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua711jmp eroarecontinua711:mov ax,0900hlea dx,mip1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua811jmp eroarecontinua811:mov ax,0900hlea dx,doiOctetiint 21h;==========================================================================; 16h Pre-relocation CS register value;==========================================================================continua112:mov word ptr SaltPozitie,16hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua212jmp eroarecontinua212:mov ax,0900hlea dx,mcs1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua312jmp eroarecontinua312:mov ax,0900hlea dx, doiOctetiint 21hcontinua412:mov word ptr SaltPozitie,16hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua512jmp eroarecontinua512:mov ax,0900hlea dx,mcs2int 21hmov bx, offset rwCSmov offset_buffer,bxScrie handler, offset_buffer, 2, NrOctetiScrisi, rezcmp rez,0jz continua612jmp eroarecontinua612:mov word ptr SaltPozitie,16hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz continua712jmp eroarecontinua712:mov ax,0900hlea dx,mcs1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua812jmp eroarecontinua812:mov ax,0900hlea dx,doiOctetiint 21h;==========================================================================; 18h Relocation table offset into header;==========================================================================continua113:mov word ptr SaltPozitie,18hmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua213jmp eroarecontinua213:mov ax,0900hlea dx,mto1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua313jmp eroarecontinua313:mov ax,0900hlea dx, doiOctetiint 21h;==========================================================================; 1Ah Overlay number;==========================================================================continua114:mov word ptr SaltPozitie,1Ahmov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie,0, PozitieCurenta, rezcmp rez,0jz continua214jmp eroarecontinua214:mov ax,0900hlea dx,mon1int 21hCiteste handler, doiOcteti, 2, NrOctetiCititi,rezcmp rez,0jz continua314jmp eroarecontinua314:mov ax,0900hlea dx, doiOctetiint 21h;msp1,mns1,mip1,mcs1,mto1,mon1;==========================================================================;AFISAM STRUCTURA CELOR 28 DE BITI, MODIFICATI;==========================================================================sf1:mov word ptr SaltPozitie,0mov word ptr SaltPozitie+2,0Pozitionare handler, SaltPozitie, 0, PozitieCurenta, rezcmp rez,0jz sf2jmp eroaresf2:mov ax,0900hlea dx,msStrint 21hmov cx,1chrepeta2:Citeste handler, buffer, 1, NrOctetiCititi,rezcmp rez,0jz continualoop2jmp eroarecontinualoop2:mov ax,0900hlea dx,bufferint 21hloop repeta2;==========================================================================;INCHIDEM FISIERUL;==========================================================================sf3:Inchidere handler, rezcmp rez,0jz iesireeroare:mov ax,0900hlea dx,mesajint 21hiesire:mov ax,4c00hint 21hend