скачал последнюю версию fasm 1.69 и обнаружил что все pe файлы он делает с не правильным выравниванием. например в старой версии fasm 1.67 мой файл получался 2048 а в новой 1536 байт(и перестал выполняться, выдает ошибку) я сначала думал что я что-то делаю не так. но потом опять взял старый fasm и все заработало. что надо сделать чтоб новая версия делала правильные файлы? может какой параметр передать надо или еще что?
я сравнил оба файла и выяснил что в новой версии fasm при компиляции не заполняет раздел reloc(pe файла) отсюда и меньший размер, и ошибки видимо тоже. как исправить не знаю(
интересно убрал из исходника section '.reloc' fixups data discardable и все заработало. вот только интересно, почему тогда предыдуший fasm все делал, и все работало? ведь этот reloc нужен иногда, и не зря же он в исходнике стоял. я думаю если я напишу более сложную программу, не будет ли ошибок без раздела reloc?
это: format pe64 dll efi entry main section '.text' code executable readable include 'efi.inc' main: sub rsp, 4*8 ; reserve space for 4 arguments mov [Handle], rcx ; ImageHandle mov [SystemTable], rdx ; pointer to SystemTable lea rdx, [_hello] mov rcx, [SystemTable] mov rcx, [rcx + EFI_SYSTEM_TABLE.ConOut] call [rcx + SIMPLE_TEXT_OUTPUT_INTERFACE.OutputString] add rsp, 4*8 mov eax, EFI_SUCCESS retn section '.data' data readable writeable Handle dq ? SystemTable dq ? _hello du 'Hello World',13,10 db 10h,0,11h,0,0,0 section '.reloc' fixups data discardable