Как написать компоновщик - PullRequest
16 голосов
/ 21 октября 2009

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

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

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

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

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

Ответы [ 3 ]

18 голосов
/ 21 октября 2009

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

16 голосов
/ 05 декабря 2010

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

5 голосов
/ 22 октября 2009

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

...