readelf -a kernel.elf
для рабочего и нерабочего ядра Это расширение (называется VLA), но его поддерживают не все компиляторы.
Only an ordinary identifier (as defined in 6.2.3) with both block scope or function
prototype scope and no linkage shall have a variably modified type. If an identifier is
declared to be an object with static storage duration, it shall not have a variable length
array type.
Это и ежу понятно.
КАК нужно работать с этими глобальными структурами?
а в нерабочем -- по смещению 0x8000
Я подозреваю, что итоговый бинарник начинается прямо с .text, поэтому в нём смещения на 0x1000 меньше, т.е. в первом случае .rdata -- начинается на 0x6000 и идёт до 0x65ec, а во втором -- начинается на 0x7000 и идёт до 0x760c.
А 54 сектора, которые ты загружаешь с диска -- это 54 * 512 = 0x6c00.
И в обоих ядрах у тебя остаются за бортом .eh_frame и .data.