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

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  ¿que significa exactamente el alineamiento?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿que significa exactamente el alineamiento?  (Leído 4,771 veces)
Usuario887


Desconectado Desconectado

Mensajes: 310


Ver Perfil
¿que significa exactamente el alineamiento?
« en: 14 Julio 2020, 18:44 pm »

Hola,

estoy inseguro de si entiendo el significado de "alineamiento" cuando se habla de programacion en ensamblador y otras categorias; segun lo que hasta ahora se, el alineamiento es el ambito de acceso. Sin embargo, ¿es eso exactamente?

Por ejemplo, existe un miembro de la estructura IMAGE_OPTIONAL_HEADER del formato PE llamado FileAlignment (cosa que no entiendo: ¿por que alinear un archivo en disco? ¿o se trata mas bien de informacion para la paginacion?). Ademas, MASM tiene ciertos atributos para la declaracion de segmentos que puede ser BYTE, WORD, PARA, etcetera, ¿se refiere esto solo al ambito del segmento que debe calcular el ensamblador? ¿o va mas alla de esto?.

Gracias de antemano.


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


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


Ver Perfil WWW
Re: ¿que significa exactamente el alineamiento?
« Respuesta #1 en: 14 Julio 2020, 19:01 pm »

estoy inseguro de si entiendo el significado de "alineamiento" cuando se habla de programacion en ensamblador y otras categorias; segun lo que hasta ahora se, el alineamiento es el ambito de acceso. Sin embargo, ¿es eso exactamente?

No ...

https://en.wikipedia.org/wiki/Data_structure_alignment
https://foro.elhacker.net/asm/declaracion_de_segmentos_en_tasm-t504472.0.html

Por ejemplo, existe un miembro de la estructura IMAGE_OPTIONAL_HEADER del formato PE llamado FileAlignment (cosa que no entiendo: ¿por que alinear un archivo en disco? ¿o se trata mas bien de informacion para la paginacion?). Ademas, MASM tiene ciertos atributos para la declaracion de segmentos que puede ser BYTE, WORD, PARA, etcetera, ¿se refiere esto solo al ambito del segmento que debe calcular el ensamblador? ¿o va mas alla de esto?.

https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-image_optional_header32


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: ¿que significa exactamente el alineamiento?
« Respuesta #2 en: 15 Julio 2020, 18:59 pm »

Segun el primer enlace:
Citar
To ensure natural alignment, it may be necessary to insert some padding between structure elements or after the last element of a structure.

Estudiando la estructura de los archivos PE, me encontre con algo asi entre la ultima estructura IMAGE_SECTION_HEADER y la sección de codigo (de un EXE, cuya sección de codigo es la primera):



Hasta ahora no le hallo un sentido. Supongamos que se trata de tal padding entre estructuras, ¿no seria mas eficiente especificar la forma de alineamiento en IMAGE_OPTIONAL_HEADER32 y aplicarlo en memoria, y no en el disco? Honestamente, no entiendo cual es el sentido de aplicarlo tambien al archivo en disco...

Ademas, estoy casi seguro de que esto se debe a una razon practica mas que fundamental... pero ¿por que es necesario? es decir ¿por que no acceder a la memoria en unidades de palabra simplemente (sea cual sea la palabra del computador, 16-bits, 32-bits, 64-bits...)?
« Última modificación: 15 Julio 2020, 19:06 pm por marax » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


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


Ver Perfil WWW
Re: ¿que significa exactamente el alineamiento?
« Respuesta #3 en: 15 Julio 2020, 20:39 pm »

FileAlignment
The alignment of the raw data of sections in the image file, in bytes. The value should be a power of 2 between 512 and 64K (inclusive). The default is 512. If the SectionAlignment member is less than the system page size, this member must be the same as SectionAlignment.


Estudiando la estructura de los archivos PE, me encontre con algo asi entre la ultima estructura IMAGE_SECTION_HEADER y la sección de codigo (de un EXE, cuya sección de codigo es la primera):

Hasta ahora no le hallo un sentido. Supongamos que se trata de tal padding entre estructuras, ¿no seria mas eficiente especificar la forma de alineamiento en IMAGE_OPTIONAL_HEADER32 y aplicarlo en memoria, y no en el disco? Honestamente, no entiendo cual es el sentido de aplicarlo tambien al archivo en disco...

Simplemente responde al alineamiento, cada sección esta alineada a minimo 512 bytes (de acuerdo al campo FileAlignment de IMAGE_OPTIONAL_HEADER) y esa de la imagen que subiste debe arrancar en 1024.

Ademas, estoy casi seguro de que esto se debe a una razon practica mas que fundamental... pero ¿por que es necesario? es decir ¿por que no acceder a la memoria en unidades de palabra simplemente (sea cual sea la palabra del computador, 16-bits, 32-bits, 64-bits...)?

Yo no diseñe el formato PE (y te estas desviando del alineamiento, buscando explicaciones mas alla de como funciona una tecnologia, a la larga te vas a topar con decisiones de diseño y si es tecnologia de hace decadas las razones no van a ser evidentes siempre) pero te puedo dar una razon: no se pueden leer de disco unidades de palabra, la unidad minima con la que se trabaja es el sector (tipicamente 512 bytes).
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: ¿que significa exactamente el alineamiento?
« Respuesta #4 en: 15 Julio 2020, 20:59 pm »

FileAlignment
The alignment of the raw data of sections in the image file, in bytes. The value should be a power of 2 between 512 and 64K (inclusive). The default is 512. If the SectionAlignment member is less than the system page size, this member must be the same as SectionAlignment.

Esta bien... ahora entiendo. Sin embargo ahora tengo una sutil duda: ¿cual es la diferencia entonces entre los miembros FileAlignment y SectionAlignment?

SectionAlignment
The alignment of sections loaded in memory, in bytes.

FileAlignment
The alignment of the raw data of sections in the image file, in bytes.


A menos que uno se refiera a todas las secciones conjuntamente y el otro a los datos de estas secciones, no lo intuyo.

y en el caso de que el primero se refiera a tal ¿con secciones conjuntamente nos referimos a los descriptores las secciones o a las secciones en si?


edito: acabo de notar que mientras uno dice in the image file, el otro loaded in memory. En ese caso tendria otras dudas (si no es molestia):

respecto a SectionAlignment:
¿por que esta informacion es relevante?
¿es relevante solo para el cargador de Windows?
¿tiene que ver con el mecanismo de paginacion?
« Última modificación: 15 Julio 2020, 21:04 pm por marax » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


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


Ver Perfil WWW
Re: ¿que significa exactamente el alineamiento?
« Respuesta #5 en: 16 Julio 2020, 00:21 am »

https://en.wikipedia.org/wiki/Data_structure_alignment#Hardware_significance_of_alignment_requirements

- En teoria se usa al mappear un binario en memoria (podes depurar Windows y comprobarlo).
- En la practica al cargador (Ldr el Loader de NTDLL.dll) ya le llega hecho por el Kernel (las secciones alineadas digo) una vez que accede a esas paginas de memoria.
- Si, tiene que ver.
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
Que es exactamente multiplexar
Multimedia
jneo21 3 13,218 Último mensaje 23 Febrero 2004, 01:33 am
por Songoku
Que es un .EXE exactamente??
Windows
juancaa 4 6,551 Último mensaje 29 Diciembre 2012, 23:22 pm
por $Edu$
¿Qué significa exactamente actualizaciones o componentes redistribuibles?
Programación General
cixert 2 3,226 Último mensaje 20 Agosto 2016, 15:30 pm
por cixert
¿Que numero exactamente es 3.4E+-38?
Programación C/C++
Xargam 3 5,245 Último mensaje 19 Abril 2018, 22:36 pm
por engel lex
¿como Windows detecta fallos de alineamiento?
Windows
Usuario887 2 2,581 Último mensaje 3 Diciembre 2020, 13:00 pm
por Usuario887
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines