Скажем, у меня есть два исполняемых файла, которые необходимо загрузить в одном и том же адресном пространстве на разных адресах. Я хочу, чтобы эти два исполняемых файла были отдельными файлами, но позволяли им вызывать функции из другого.Связывание отдельных двоичных файлов
Например, если исполняемый файл А, который должен быть загружен в 0x1000, содержит функцию void foo()
на 0x1ABC и исполняемому B, загруженной в 0x2000, вызывает foo()
, я хочу, чтобы в конечном итоге, как call 0x1ABC
в исполняемом B.
Причина, по которой мне это нужно, это игрушка ОС. Мне нужен мой загрузчик, чтобы узнать, где мой обработчик прерываний, и где начинается код ядра. Я мог бы сжать все это в один файл, но я бы предпочел.
На данный момент я решаю проблему, вручную загружая необходимые функции на «приятных» адресах и вручную записывая переходы на них. Это работает, но, говоря об иглах, он субоптимален.