Хорошо, выяснилось, что в программе отсутствует второй заголовок программы с флагом R / W для раздела data / bss, он описывает второй сегмент памяти для ОС с соответствующими флагами для выполнения во время выполнения.
Вот что добавить после phdrsz equ $ - phdr
строки:
dd 1 ; p_type
dd data - LOAD_ADDRESS ; p_offset
dd data ; p_vaddr
dd data ; p_paddr
dd datasz ; p_filesz
dd datasz + bsssz ; p_memsz
dd 6 ; p_flags (R/W)
dd 0x1000 ; p_align
Примечание: Прежде, чем понять это, я ввел в заблуждение относительно важности разделов, я подумал, что, описывая разделы, я мог получить доступ к памяти, но этоОказывается, что заголовки программы - это то, что ищет ОС, код целых разделов можно удалить, и программа все еще работает.