Связывание необработанных данных / ресурсов в исполняемый файл с использованием LD - PullRequest
2 голосов
/ 12 декабря 2010

До сих пор я всегда использовал ресурсы под MSVC ++ для получения доступа к необработанным данным из моих программ, и я никогда не работал напрямую с компоновщиком, но сейчас я работаю под Linux и использую перекрестный доступ. компилятор для создания эльфийских файлов. Мы с другом работаем над игрушечной ОС.

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

Одна из наших предыдущих идей состояла в том, чтобы просто написать программу для преобразования данных в исходный файл C, где данные были представлены в виде массива байтов, но мы считаем, что это немного грязно, и мы предпочли бы, чтобы это было связано непосредственно.

Есть идеи? Мне не нужны ужасные подробности, просто широкий обзор того, что нужно сделать. Я полагаю, что мы, вероятно, должны внести некоторые изменения в наш скрипт компоновщика.

1 Ответ

2 голосов
/ 15 декабря 2010

Посмотрите на вызов objdump --add-section после завершения ссылки, чтобы добавить произвольные данные в файл ELF.

В качестве альтернативы, если вы пишете ядро, вы можете сделать то, что делает Linux, чтобы загрузить initrd, и просто GRUB загрузит ваше ядро, а затем отдельно загрузить данные в известную область памяти и получить к ней доступ таким образом.

...