Как написать компоновщик

Я написал компилятор для C, который выводит байт-код. Причиной этого была возможность писать приложения для встроенной платформы, которая работает на нескольких платформах.

У меня есть компилятор и ассемблер.

Мне нужно написать линкер, и я застрял.

формат объекта-пользовательский, разработанный вокруг интерпретатора байтового кода,поэтому я не могу использовать существующие компоновщики.

мое самое большое препятствие - как организовать объектный код для вывода связанного двоичного файла. В настоящее время динамическая компоновка не требуется. Сначала мне нужно заставить статическую связь работать.

3 ответов


http://linker.iecc.com это единственная книга, которую я знаю об этом предмете.


Ян Лэнс Тейлор, один из основных разработчиков gold linker(теперь часть binutils), опубликовал серию блогов о том, как работают линкеры. Вы можете найти его здесь.


Я второй линкеры и погрузчики книги. Вы заявляете, что формат объекта является пользовательским. Если формат находится под вашим контролем, вы можете использовать формат ELF с байт-кодом в качестве новой архитектуры машины, a la x86, SPARC, ARM и т. д. Источники GNU binutils достаточно податливы, чтобы позволить вам включить вашу "архитектуру".