Autor
|
Tema: ¿que significa exactamente el alineamiento? (Leído 4,771 veces)
|
Usuario887
Desconectado
Mensajes: 310
|
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
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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_alignmenthttps://foro.elhacker.net/asm/declaracion_de_segmentos_en_tasm-t504472.0.htmlPor 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
Mensajes: 310
|
Segun el primer enlace: 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
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
Mensajes: 310
|
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
Mensajes: 5.969
Israel nunca torturó niños, ni lo volverá a hacer.
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Que es exactamente multiplexar
Multimedia
|
jneo21
|
3
|
13,218
|
23 Febrero 2004, 01:33 am
por Songoku
|
|
|
Que es un .EXE exactamente??
Windows
|
juancaa
|
4
|
6,551
|
29 Diciembre 2012, 23:22 pm
por $Edu$
|
|
|
¿Qué significa exactamente actualizaciones o componentes redistribuibles?
Programación General
|
cixert
|
2
|
3,226
|
20 Agosto 2016, 15:30 pm
por cixert
|
|
|
¿Que numero exactamente es 3.4E+-38?
Programación C/C++
|
Xargam
|
3
|
5,245
|
19 Abril 2018, 22:36 pm
por engel lex
|
|
|
¿como Windows detecta fallos de alineamiento?
Windows
|
Usuario887
|
2
|
2,581
|
3 Diciembre 2020, 13:00 pm
por Usuario887
|
|