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.
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.
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).
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.
Cita de: marax en 15 Julio 2020, 18:59 PM
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.
Cita de: marax en 15 Julio 2020, 18:59 PMAdemas, 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).