в MSCOFF при наличии сегмента .bss не линкуется - линкер падает.
Параметры линкера:
link /SUBSYSTEM:CONSOLE /LIBPATH:"./Lib" /entry:DllEntryPoint /LARGEADDRESSAWARE:NO /ASSEMBLYDEBUG:DISABLE /DEBUG:NONE /MACHINE:X64 /ALIGN:16 MSCOFF.OBJ
Падает с
Microsoft (R) Incremental Linker Version 14.28.29336.0
Copyright (C) Microsoft Corporation. All rights reserved.
LINK : warning LNK4108: /ALIGN specified without /DRIVER; image may not run
MSCOFF.OBJ : fatal error LNK1107: invalid or corrupt file: cannot read at 0x1F40
Что я делаю не так в обозначении сегмента bss?
Просто ради теста: 1) перед rq добавь dq 1 и проверь; 2) не добавляй dq, но убери data из .bss.
В случае 1 - слинковалось, но секция bss увеличилась на размер неинициализированных данных, т.е хотелось PhysSize=0, VirtSize=размер буфера, в случае добавления в .bss dq 1 PhysSize=VirtSize
Вот насколько я помню, второй вариант должен работать, потому что data в фасме делает IMAGE_SCN_CNT_INITIALIZED_DATA (вроде бы). Ты добавил инициализированные данные, и всё заработало. Уберёшь data, и всё тоже заработает.
Заработало, тем не менее секция .bss превратилась в инициализированную .data (((
То есть? У существующей .data увеличился виртуальный размер, или оно прямо из .bss сделало большую кучу нулей?
из .bss сделало кучу нолей :(
Обсуждают сегодня