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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Algunas dudas sobre ensambladores.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Algunas dudas sobre ensambladores.  (Leído 5,540 veces)
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Algunas dudas sobre ensambladores.
« en: 16 Mayo 2020, 21:39 pm »

Hola,

tengo algunas inseguridades acerca de los ensambladores y me preguntaba si alguien conoce las respuestas.

¿para que sirve precisamente la instruccion ORG?
Se que delimita el origen del programa en la generacion de archivos COM pero, ¿a que se refiere esto precisamente? ¿No es el registro CS dependiente unicamente del cargador del sistema?

Lo mismo respecto a la instruccion LEA...
Se supone que esta instruccion carga la direccion efectiva (Load Effective Address), pero ¿como?, es decir:

si
Código
  1. mov dx, offset _data
  2.  

es lo mismo que
Código
  1. lea dx, _data
  2.  

¿como el procesador, en tiempo de ejecucion, sabe que es _data?. Me explico: ¿como puede cargarse la direccion efectiva de una direccion de memoria? es redundante... ¿por que no simplemente la primera instruccion? ¿o es LEA una instruccion del compilador que luego sustituye por MOV ..., OFFSET ..., en vez de ser parte del repertorio de instrucciones del procesador?

Saludos y gracias de antemano.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Algunas dudas sobre ensambladores.
« Respuesta #1 en: 16 Mayo 2020, 22:53 pm »

¿para que sirve precisamente la instruccion ORG?
Se que delimita el origen del programa en la generacion de archivos COM pero, ¿a que se refiere esto precisamente? ¿No es el registro CS dependiente unicamente del cargador del sistema?

En el manual de TASM que te deje antes hay una explicacion. Un uso habitual - al menos para aprender - era este:
https://stackoverflow.com/questions/5611047/why-do-we-give-org-7c00-at-the-start-of-a-boot-program

Lo mismo respecto a la instruccion LEA...

LEA es un opcode y MOV es otro:
https://c9x.me/x86/html/file_module_x86_id_153.html
https://c9x.me/x86/html/file_module_x86_id_176.html

LEA se puede usar de mas maneras que tu ejemplo (alguna esta en el link de abajo de donde viene la siguiente cita), para el mismo:
"Another form of the MOV instruction is MOV reg,immdata which means read the immediate data (i.e. constant) immdata into register reg. Note that if the addr in LEA reg,addr is just a constant (i.e. a fixed offset) then that LEA instruction is essentially exactly the same as an equivalent MOV reg,immdata instruction that loads the same constant as immediate data."

https://stackoverflow.com/questions/1699748/what-is-the-difference-between-mov-and-lea


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Algunas dudas sobre ensambladores.
« Respuesta #2 en: 18 Mayo 2020, 12:58 pm »

En el manual de TASM que te deje antes hay una explicacion. Un uso habitual - al menos para aprender - era este:
https://stackoverflow.com/questions/5611047/why-do-we-give-org-7c00-at-the-start-of-a-boot-program
¿a que te refieres con "al menos para aprender"?
Ya entiendo por que no se codifica... es una pseudo-instruccion. Aunque me haces dudar de si la entiendo plenamente con eso.
Ya habia entrado a ese link en busqueda de la misma respuesta, pero las ultimas dos respuestas no estaban, fueron las mas claras.
Respecto al manual de TASM, aun no llego a esa parte.

Gracias por responder.
Saludos.
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Algunas dudas sobre ensambladores.
« Respuesta #3 en: 18 Mayo 2020, 16:31 pm »

¿a que te refieres con "al menos para aprender"?

Me referia los comentarios de Michael Petch como: There is a difference between writing a bootloader from an academic perspective and targeting a particular VM/emulator/physical hardware but the shortcuts academics seem to take and teach doesn't necessarily make for the most portable mechanism. Anyone who is looking to write a real bootloader will know not to make any assumptions because they understand the ramifications. I should note that in PCDOS 2.1 not only did they explicitly set all the registers that included CS and they would do equivalent FAR JMP to a local label 0x0000:0x7C00+offset to set CS to 0.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Algunas dudas sobre ensambladores.
« Respuesta #4 en: 18 Mayo 2020, 18:51 pm »

Anyone who is looking to write a real bootloader will know not to make any assumptions because they understand the ramifications.

Precisamente esta es la razon por la cual hice este tema. Aunque no estaba programando un bootloader.

Hay algo que no me queda muy claro... se supone que ORG se utiliza para especificar el desplazamiento dentro del desplazamiento en el acceso a la memoria (datos). Sin embargo, ¿solo datos? ¿o añade este valor a otros tipos de referencias tambien?

Y otra cosa... ¿recuerdas el archivo hookTSR.asm en el libro de Bill Blunden?
Al inicio:

Citar
SEGMENT CSEG WORD 'code'
ASSUME CS:CSEG, SS:CSEG, DS:CSEG
ORG 100h
...

¿que es lo que sucede cuando se ensambla la linea de codigo:

Citar
PUSHF
CALL CS:_oldISR
...
?

Si Windows carga los archivos COM identicamente como se encuentran en el archivo, ¿no se estaria especificando 100h unidades "extra" al direccionamiento, al especificar ORG 100h?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Algunas dudas sobre ensambladores.
« Respuesta #5 en: 18 Mayo 2020, 20:02 pm »

Hay algo que no me queda muy claro... se supone que ORG se utiliza para especificar el desplazamiento dentro del desplazamiento en el acceso a la memoria (datos). Sin embargo, ¿solo datos? ¿o añade este valor a otros tipos de referencias tambien?
...
¿que es lo que sucede cuando se ensambla la linea de codigo:
?


Codigo tambien; _oldISR seria 0409h de otra manera (aunque no podrias enlazarlo con tlink como .COM sin el ORG 0100h). Usa TD hookTSR.com y podras ver:


Si Windows carga los archivos COM identicamente como se encuentran en el archivo, ¿no se estaria especificando 100h unidades "extra" al direccionamiento, al especificar ORG 100h?

No. Un .COM es un archivo sin siquiera una misera cabecera asi que se carga tal cual es, MS-DOS pone antes el PSP: "Since it lacks relocation information, it is loaded by the operating system at a pre-set address, at offset 0100h immediately following the PSP, where it is executed (hence the limitation of the executable's size): the entry point is fixed at 0100h." https://en.wikipedia.org/wiki/COM_file

En realidad Windows emula los ejecutables de 16 bits  ;D https://en.wikipedia.org/wiki/Virtual_DOS_machine#Windows_NTVDM
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Algunas dudas sobre ensambladores.
« Respuesta #6 en: 18 Mayo 2020, 23:23 pm »

Codigo tambien; _oldISR seria 0409h de otra manera
Sin embargo en este caso codigo tambien porque esta siendo referenciado por un label, ¿no?

No. Un .COM es un archivo sin siquiera una misera cabecera asi que se carga tal cual es, MS-DOS pone antes el PSP: "Since it lacks relocation information, it is loaded by the operating system at a pre-set address, at offset 0100h immediately following the PSP, where it is executed (hence the limitation of the executable's size): the entry point is fixed at 0100h." https://en.wikipedia.org/wiki/COM_file
Esta bien... pense que lo primero que se cargaba era el MCB del programa...
¿entonces el PSP mide 100 unidades hexadecimales?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Algunas dudas sobre ensambladores.
« Respuesta #7 en: 19 Mayo 2020, 00:13 am »

https://en.wikipedia.org/wiki/Program_Segment_Prefix
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Algunas dudas sobre ensambladores.
« Respuesta #8 en: 19 Mayo 2020, 18:14 pm »

aunque no podrias enlazarlo con tlink como .COM sin el ORG 0100h
Por cierto... ¿como TLINK reconoce que se declaro ORG 100h si es una pseudo-instruccion?
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Algunas dudas sobre ensambladores.
« Respuesta #9 en: 19 Mayo 2020, 22:41 pm »

Por cierto... ¿como TLINK reconoce que se declaro ORG 100h si es una pseudo-instruccion?

El .asm se ensambla en .obj y ahi en su formato interno se pasan esa informacion entre el ensamblador y el enlazador.

https://en.wikipedia.org/wiki/Object_file
« Última modificación: 19 Mayo 2020, 22:44 pm por Eternal Idol » En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Algunas dudas sobre el erize 1W
Hacking Wireless
acastrolorenzo 3 4,075 Último mensaje 26 Septiembre 2010, 03:02 am
por buite
Algunas dudas sobre el uso de trojans « 1 2 »
Hacking
erniker 14 8,082 Último mensaje 2 Diciembre 2011, 14:16 pm
por erniker
Algunas dudas sobre Drivers... « 1 2 3 »
Programación C/C++
Vaagish 20 8,755 Último mensaje 11 Noviembre 2013, 19:01 pm
por Eternal Idol
...Algunas dudas sobre la WWE (lucha libre)
Foro Libre
Eleкtro 5 3,338 Último mensaje 17 Octubre 2016, 18:10 pm
por basickdagger
Algunas dudas sobre el formato PE
Windows
Usuario887 1 6,093 Último mensaje 4 Diciembre 2021, 15:51 pm
por Randomize
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines