Autor
|
Tema: [SOLUCIONADO] ¿ Que pinta aqui el registro si ? (Leído 4,078 veces)
|
lucaslopez0000
|
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 [BITS 16] ; Directiva. Indica al compilador NASM que nuestro programa es un binario de 16 bits. ORG 0 ; Directiva que indica que queremos comenzar el programa al principio de la memoria. ; Podemos iniciarlo directamente en la direccion 7Ch y saltarnos lo siguiente, aunque mejor no hacerlo asi. main: ; Ajustamos los registros para que vayan a la direccion 7Ch cli mov ax, 0x07C0 mov ds, ax mov es, ax mov fs, ax mov gs, ax ; Creamos una pila de llamada mov ax, 0×0000 mov ss, ax mov sp, 0xFFFF sti mov si, msgTexto ; Cargamos en el registro si el texto call DisplayMessage ; Llamamos a la subrutina para mostrar el texto DisplayMessage: ; Subrutina para mostrar un texto cargado en el ;registro “si” lodsb ; cargamos el siguiente caracter de la cadena de caract. or al, al ; comprobamos que no hay un caracter nulo, en cuyo caso… jz .DONE ; … lo interpretamos como final de linea, por lo que termina la subrutina. mov ah, 0x0E ; Le pedimos a la BIOS que muestre el texto mov bh, 0×00 ; Pagina 0 mov bl, 0×07 ; Atributo de texto int 0×10 ; Interrupcion 10: mostrar el texto en pantalla jmp DisplayMessage ; Si no hemos terminado, repetimos .DONE: jmp Loop ; Si hemos terminado, creamos un bucle infinito para bloquear el ordenador Loop: jmp Loop msgTexto db 0x0D, 0x0A, “Hola mundo!!”, 0×00 ; Nuestro mensaje times 510-($-$$) db 0 dw 0xAA55
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
Mensajes: 1.027
|
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
|
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 or al , al jz .DONE
otro modo de hacerlo igual de valido es cmp al , 0 jz .DONE
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
Mensajes: 1.027
|
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
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Personalizar error del include [Solucionado y código aquí]
PHP
|
dimitrix
|
5
|
4,565
|
9 Enero 2008, 22:43 pm
por dimitrix
|
|
|
[SOLUCIONADO]Agregar registro a sql server
Bases de Datos
|
diego_lp
|
6
|
8,836
|
12 Septiembre 2009, 21:04 pm
por diego_lp
|
|
|
Problema al agregar al registro[Solucionado]
.NET (C#, VB.NET, ASP)
|
Pablo Videla
|
4
|
4,951
|
22 Noviembre 2009, 01:21 am
por Pablo Videla
|
|
|
[SOLUCIONADO] Agregar Registro
Programación Visual Basic
|
VanHan
|
4
|
3,318
|
22 Noviembre 2010, 19:29 pm
por VanHan
|
|
|
Script con pinta de spiware
« 1 2 »
Scripting
|
White_Hunter117
|
10
|
5,411
|
7 Enero 2021, 02:06 am
por White_Hunter117
|
|