Скажу так. Я не работаю с линукс, но прекрасно понимаю, что в такой системе для каждой запущенной программы выделяется адресное пространство из общей памяти на системе. Это и называется виртуальной памятью. Т.е. программа работает не с физическими адресами вроде 0xFFAB 7708, которые каждый раз при запуске могут быть разными, и с адресным пространством, например 0 - 0x000 FFFF. Очень условно. Но в этом адресном пространстве есть секции только для чтения, или, возможно, что там находится какая-то служебная память. Не знаю. Но предполагаю. Вот именно поэтому Вам туда запрещено писать. В принципе, писать по конкретному адресу памяти - плохой стиль программирования, хотя и незапрещённый. Но даже на системе bare-metal, т.е. без ОС, Вы не можете просто так взять и что-то записать по адресу 0x100, т.к. там вообще ничего может и не быть. Или там находится FLASH-память, которая не пишется напрямую, а только через контроллер памяти. Подробней Вам рассказать не могу, т.к., повторюсь, не работаю с ОС Linux на встраиваемых системах. Да и на ПК тоже. Посмотрите в скрипт линкера (ld), который заведует распределением памяти для Вашей программы. Возможно, там содержится ответ, что находится по адресу 0x100...