This is a more corrected version of the whole.

Specially, now this can be a "memory mapped
file" with abbreviated code and data sections
on disk, and still can fully support any size
of sections.

The section header RVA's have also been
fixed because the previous formula was not
completely correct. Now I expect it to be
fully correct.

REMEMBER: Sections themselves should be in exactly
the same order as the section header listing;
otherwise the RVAs within the section header
entries will fail in their formulas and the
executable will become malformed.

_______________________



Here we will try to determine how to calculate
the different sections' data addresses more
independently in an assembler-independent
fashion.

NOTE: This time we fixed the abbreviated
form of the program, being able to use at
last a FileAlignment of 0x200 and a
SectionAlignment of 0x1000, and making a sum
of all of the sections sizes, and also the
size of the header with a multiple of
SectionAlignment.

________________________________

Added the ".idata" section. We had to fix the
number of sections from 2 to 3, add the actual
"_idata/idata.asm" file, add the ".idata" entry
to the "sectheaders/hdr.asm" file and set
its virtual address to:

round(_Code_SZ,SectionAlignment)+round(_data_SZ,SectionAlignment)+round(_idata,SectionAlignment)

It looks like this formula has to be grown up
as we add sections, in this way, adding one
more to the previous ones.

WE ALSO DID THE SAME FOR THE ImportTable.VirtualAddress FIELD
OF THE OPTIONAL HEADER (the second RvaAndSizes QWORD).


Also increase the SizeOfImage, in the optional
header (this is EXTREMELY IMPORTANT):

round(Headers_SZ,SectionAlignment)+round(_Code_SZ,SectionAlignment)+round(_data_SZ,SectionAlignment)+round(_idata_SZ,SectionAlignment)