Как написать компоновщик
Я написал компилятор для C, который выводит байт-код. Причиной этого была возможность писать приложения для встроенной платформы, которая работает на нескольких платформах.
У меня есть компилятор и ассемблер.
Мне нужно написать линкер, и я застрял.
формат объекта-пользовательский, разработанный вокруг интерпретатора байтового кода,поэтому я не могу использовать существующие компоновщики.
мое самое большое препятствие - как организовать объектный код для вывода связанного двоичного файла. В настоящее время динамическая компоновка не требуется. Сначала мне нужно заставить статическую связь работать.
3 ответов
http://linker.iecc.com это единственная книга, которую я знаю об этом предмете.
Ян Лэнс Тейлор, один из основных разработчиков gold linker(теперь часть binutils), опубликовал серию блогов о том, как работают линкеры. Вы можете найти его здесь.
Я второй линкеры и погрузчики книги. Вы заявляете, что формат объекта является пользовательским. Если формат находится под вашим контролем, вы можете использовать формат ELF с байт-кодом в качестве новой архитектуры машины, a la x86, SPARC, ARM и т. д. Источники GNU binutils достаточно податливы, чтобы позволить вам включить вашу "архитектуру".