На определенной платформе, по причинам, в которые я не буду вдаваться, мне нужен был раздел исполняемого файла, который я мог бы сбросить после загрузки.Теперь, к сожалению, отключение памяти для исполняемого файла было невозможно, поэтому я был вынужден прибегнуть к хитрости компоновщика.
Я закончил тем, что представил раздел исполняемого файла с псевдонимом bss.Таким образом, предполагая, что я смогу забрать некоторый код достаточно рано, я мог бы скопировать данные, повторно инициализировать bss, и, пока мой псевдонимный раздел был меньше, чем общий bss исполняемого файла, не заплатил за привилегию.Есть пара проблем в том, что я вообще не мог изменить crt, и самый ранний момент, когда я мог внедрить код, был все еще после инициализации tls (который использовал некоторые bss), но нет ничего невозможного для обхода.
Я все еще удивлен, что это сработало, я бы подумал, что bss был инициализирован crt после загрузки всех разделов программы.Я не пробовал его ни на одной платформе, где у меня есть доступ к загрузчику или к источнику crt.