elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [SOLUCIONADO] ¿ Que pinta aqui el registro si ?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] ¿ Que pinta aqui el registro si ?  (Leído 3,722 veces)
lucaslopez0000

Desconectado Desconectado

Mensajes: 95


Ver Perfil WWW
[SOLUCIONADO] ¿ Que pinta aqui el registro si ?
« en: 24 Junio 2013, 13:30 pm »

Hola , estoy estudiando el codigo fuente de un bootloader y me he dado cuenta de una cosa , que luego os cuento despues de poner el codigo
Código
  1.    [BITS 16]        ; Directiva. Indica al compilador NASM que nuestro programa es un binario de 16 bits.
  2.    ORG 0            ; Directiva que indica que queremos comenzar el programa al principio de la memoria.
  3.    ; Podemos iniciarlo directamente en la direccion 7Ch y saltarnos lo siguiente, aunque mejor no hacerlo asi.
  4.    main:
  5.    ; Ajustamos los registros para que vayan a la direccion 7Ch
  6.    cli
  7.    mov     ax, 0x07C0
  8.    mov     ds, ax
  9.    mov     es, ax
  10.    mov     fs, ax
  11.    mov     gs, ax
  12.    ; Creamos una pila de llamada
  13.    mov     ax, 0×0000
  14.    mov     ss, ax
  15.    mov     sp, 0xFFFF
  16.    sti
  17.    mov si, msgTexto                             ; Cargamos en el registro si el texto
  18.    call DisplayMessage                         ; Llamamos a la subrutina para mostrar el texto
  19.  
  20.    DisplayMessage:                                     ; Subrutina para mostrar un texto cargado en el
  21.    ;registro “si”
  22.    lodsb                                       ; cargamos el siguiente caracter de la cadena de caract.
  23.    or      al, al                              ; comprobamos que no hay un caracter nulo, en cuyo caso…
  24.    jz      .DONE                                 ; … lo interpretamos como final de linea, por lo que termina la subrutina.
  25.    mov     ah, 0x0E                            ; Le pedimos a la BIOS que muestre el texto
  26.    mov     bh, 0×00                            ; Pagina 0
  27.    mov     bl, 0×07                            ; Atributo de texto
  28.    int     0×10                                ; Interrupcion 10: mostrar el texto en pantalla
  29.    jmp     DisplayMessage                         ; Si no hemos terminado, repetimos
  30.    .DONE:
  31.    jmp Loop                                     ; Si hemos terminado, creamos un bucle infinito para bloquear el ordenador
  32.    Loop:
  33.    jmp Loop
  34.    msgTexto db 0x0D, 0x0A, “Hola mundo!!”, 0×00     ; Nuestro mensaje
  35.    times 510-($-$$) db 0
  36.    dw 0xAA55
  37.  

Lo que no comprendo es que en la linea 17 como va a mover un string al registro si ?? Este codigo funciona , pero yo lo intente por mi lado sin usar la instruccion lodsb y me sale un caracer raro. Estoy desconcertado , no comprendo como mueve un string a un registro  , ¿¿¿??? Alguien me explica como narices hace el autor de este codigo para mostrar el mensaje ????? Muchas gracias :)


« Última modificación: 25 Junio 2013, 18:09 pm por The C Coder » En línea

La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: ¿ Que pinta aqui el registro si ?
« Respuesta #1 en: 24 Junio 2013, 15:06 pm »

SI es el primer argumento de la función DisplayMessage. No mueve una cadena si no la dirección que apunta a esa cadena.

Lo que hace ese lodsb es copiar el primer byte del contenido de la dirección de si a al.
Y luego depende de como este la bandera DF se incrementa o decrementa la dirección de si, que en tú caso es incrementar.

Se imprime dicho carácter si no es NULL con la interrupción 0x10, si es NULL se salta a .DONE y si no pues sigue el ciclo de lodsb.

Si no entiendes algo más del código ya sabes, pero no sé porque empiezas con algo tan avanzado se nota que no entiendas nada.

Un saludo.


En línea

lucaslopez0000

Desconectado Desconectado

Mensajes: 95


Ver Perfil WWW
Re: ¿ Que pinta aqui el registro si ?
« Respuesta #2 en: 24 Junio 2013, 15:43 pm »

SI es el primer argumento de la función DisplayMessage. No mueve una cadena si no la dirección que apunta a esa cadena.

Lo que hace ese lodsb es copiar el primer byte del contenido de la dirección de si a al.
Y luego depende de como este la bandera DF se incrementa o decrementa la dirección de si, que en tú caso es incrementar.

Se imprime dicho carácter si no es NULL con la interrupción 0x10, si es NULL se salta a .DONE y si no pues sigue el ciclo de lodsb.

Si no entiendes algo más del código ya sabes, pero no sé porque empiezas con algo tan avanzado se nota que no entiendas nada.

Un saludo.

No se trata de nada muy avanzado , de hecho llevo 3 semanas aprendiendo ensamblador y ya habia visto bootloaders antes. Lo que pasa es que el que escribio el codigo lo hizo de una manera poco habitual , muchos otros bootloaders 'hola mundo' usaban otro metodo que no implica lodsb. Por ejemplo cuando comprueba si el caracter es cero con
Código
  1. or al , al
  2. jz .DONE
  3.  

otro modo de hacerlo igual de valido es

Código
  1. cmp al , 0
  2. jz .DONE
  3.  

Lo que quiero decir con esto es que hay muchas maneras de hacer las cosas , y cada programador tiene su estilo propio , que puede que a otros no les parezca claro y vean otro modo mas simple de hacerlo.
Aclarado esto ultimo  , te doy las gracias :)
En línea

La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX
xv0


Desconectado Desconectado

Mensajes: 1.026



Ver Perfil
Re: ¿ Que pinta aqui el registro si ?
« Respuesta #3 en: 24 Junio 2013, 17:34 pm »

No se trata de nada muy avanzado , de hecho llevo 3 semanas aprendiendo ensamblador y ya habia visto bootloaders antes.

Por la pregunta y la formulación me dio esa sensación.

Lo que pasa es que el que escribio el codigo lo hizo de una manera poco habitual , muchos otros bootloaders 'hola mundo' usaban otro metodo que no implica lodsb.

La instrucción lods es muy eficiente, para conseguir códigos más potentes tienes que hacer cosas poco habituales.

Lo que quiero decir con esto es que hay muchas maneras de hacer las cosas , y cada programador tiene su estilo propio , que puede que a otros no les parezca claro y vean otro modo mas simple de hacerlo.

Si, en este caso las dos son iguales de buenas, un ejemplo si yo estoy programando una shellcode prefiero el or, así no dejo bytes núlos, todo depende de lo que estes haciendo y tú estilo claro.

Un saludo.
En línea

lucaslopez0000

Desconectado Desconectado

Mensajes: 95


Ver Perfil WWW
Re: ¿ Que pinta aqui el registro si ?
« Respuesta #4 en: 24 Junio 2013, 17:55 pm »

Por la pregunta y la formulación me dio esa sensación.

La instrucción lods es muy eficiente, para conseguir códigos más potentes tienes que hacer cosas poco habituales.

Si, en este caso las dos son iguales de buenas, un ejemplo si yo estoy programando una shellcode prefiero el or, así no dejo bytes núlos, todo depende de lo que estes haciendo y tú estilo claro.

Un saludo.

Tienes razon. La proxima vez intentare formular la pregunta de otro modo ;)
En línea

La manera mas simple de solucionar los problemas de windows , los virus , el spyware , la basura de microsoft en general

USA LINUX
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Personalizar error del include [Solucionado y código aquí]
PHP
dimitrix 5 4,259 Último mensaje 9 Enero 2008, 22:43 pm
por dimitrix
[SOLUCIONADO]Agregar registro a sql server
Bases de Datos
diego_lp 6 8,494 Último mensaje 12 Septiembre 2009, 21:04 pm
por diego_lp
Problema al agregar al registro[Solucionado]
.NET (C#, VB.NET, ASP)
Pablo Videla 4 4,683 Último mensaje 22 Noviembre 2009, 01:21 am
por Pablo Videla
[SOLUCIONADO] Agregar Registro
Programación Visual Basic
VanHan 4 3,061 Último mensaje 22 Noviembre 2010, 19:29 pm
por VanHan
Script con pinta de spiware « 1 2 »
Scripting
White_Hunter117 10 4,735 Último mensaje 7 Enero 2021, 02:06 am
por White_Hunter117
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines