Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Julio 26, 2008, 09:07:23
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  ASM (Moderador: The Shadow)  |  Tema: [W][V] Tuto (residencia bajo MCB) 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: [W][V] Tuto (residencia bajo MCB)  (Leído 120 veces)
The Shadow
Moderadores
Colaborador
*****
Desconectado Desconectado

Mensajes: 754


Fucking mnemonic c0d1n6!

shadow@el-hacker.org
Ver Perfil Email
« en: Marzo 18, 2008, 07:27:14 »

weno en este tuto veran como dejar un programa residente por MCB (memory control block)

formato del MCB:

dirección Contenido                                           Tipo
     +00h ID (Z = ultimo, M = hay mas)                      1 BYTE
     +01h dirección del segmento del PSP asociado           1 WORD
     +03h Nº de párrafos en la zona de memoria alojada      1 WORD
     +05h No se usa                                         11 BYTES
     +10h La zona de memoria alojada                        x PARRAF

ok para dejar nuestro programa residente por MCB (con DOS) tenemos que:

-Saber si es .com o .exe
--Si es .com sakamos psp (si en exe trabajamos con ds)
--* mov bx, cs |otra forma de sakr psp y ver si tenemos copias es (psp a bx):
                mov     dx,0f904
      mov     ah,62                 
      int     21
--Le restamos 1 a bx para encontrar la direccion de MCB y movemos a data
--* dec bx
    mov ds, bx
--en si+3 se encuentra la cantidad de memoria alojada, hay le restamos la longitud del programa
--* sub word ptr [si+3],prg_lng
--ya que tenemos la cantidad de memoria tenemos que liberarla
--* mov ax,word ptr [si+3] ;guardamos el resultado en ax
    mov dx,ax ;en bx la nueva memoria a liberar
    push cs
    pop es
    mov ah,4ah ;funcion para liberar memoria
    int 21h
--aora tenemos q asignar la memoria liberada al programa:
--* pop bx ;sakmos la cantidad
    dec bx ;DOS usara un DWORD asiq se lo dejamos
    mov ah, 48h ;funcion para asignar
    int 21h
--listo, aora podemos usar una tecnica que usa DOS para identificar sus partes y esto es identificar su 1er offset con "8" XD..
--* dec ax
    mov es, ax
    mov word ptr es:[1], 8
    mov word ptr es:[8],'XX'
    inc ax
    mov es, ax
    push es
    rep movsb  ;listo, dejamos residente


....aki para modificar MCB directamente:

      mov     dx,0f904
      mov     ah,62                   ; lo mismo q con DOS, sakamos psp
      int     21                     
      dec     bx                      ; vamos a MCB
      mov     ds,bx           
      sub     word ptr [si+3],prg_lng
      sub     word ptr [si+12],prg_lng ; movemos a DOS tmbn
      mov     ds,si                   ; reservams 2K de memoria
      mov     es,dx
      push    cs
      pop     ds
      mov     si,offset inicio
      mov     di,si
      mov     cx,(fin - inicio) / 2
      rep     movsw                   ;residentes!

weno suficiente ... espero q les sirva!

Saludos!
« Última modificación: Abril 02, 2008, 05:21:21 por The Shadow » En línea


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion





Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
Reglamento del Foro
     Linux  Registered User #473016
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  ASM (Moderador: The Shadow)  |  Tema: [W][V] Tuto (residencia bajo MCB) « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC