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