The PE loader of Chicago Build 73(f/g) relies on "Section size in file" in ".bss" section.
normally modern linkers will put a 0 in this field, and normally PE loader will calculate the real size of this section in memory and give correct permissions for read and write.
but Chicago Build 73 doesn't do this but relies on "Section size in file" field instead, while modern linkers put a 0 to this field, Chicago Build 73 will simply not giving this section correct permissions.
As a result, program can't write to its global variables and causing a Page Fault in kernel32.dll every time it tries to access its global variables.
For a fix, I used PE Editor that comes from LordPE suite to edit .bss section header. I also used IDA to further verify the size of .bss section for me to fill the value (with rounding up to next 512 bytes)
and finally my binary is working in Chicago Build 73.
