Цитата
Как-то тут проскочила мысль, что настоящая операционная система должна грузить сторонние приложения и выполнять их.
Мысль не очень, динамическая загрузка приложений ортогональна понятию ОС.
Практика показывает, чем более эмдеддед ОС, тем проще и технологичнее использовать статическое связываение,
в виде либ + хидеров, например.
Про загрузку dll - там связывание может происходить по ординалам, т.е. тупо по номерам. Есть еще связывание по хешу,
тот же CRC32 подойдет, причем все делается на этапе компиляции (включая проверку на коллизии). Где смотреть
примеры реализации - тот же линух и сорцы прочих ос. Так что 300КБ можно уменьшить в разы. Грубо говоря, при экспорте
символа он оборачивается в макрос, строится отдельная секция, которую потом обрабатывает линкер в ld-скрипте.
Ну а загрузчик уже юзает данную секцию в своих целях.
Про загрузку кода по произвольным адресам - гуглите relocation и fixup. Классическая дока по эльфам (собственно,
виндовый PE формат это упрощенный эльф) -
http://www.becbapatla.ac.in/cse/naveenv/docs/LL1.pdfТам есть все - разные архитектуры, разный эндианнес, вопросы MMU...