Элегантный способ установить базовый адрес образа ELF с помощью Linux binutils?
Для личного проекта мне нужно написать исполняемый файл, который загружается по адресу памяти не по умолчанию. Изэтот ТАК вопросЯ знаю, что могу установить адрес входа для ELF и изменить адреса разделов так, чтобы исполняемый файл эффективно основывался на каком-то выбранном мной адресе. Тем не менее, ответ предполагает, что это работает, только если я не инициализирую glibc (что мне нужно для этого проекта), и установка адресов памяти разделов каждый раз, когда я компилирую, будет трудной (не говоря уже об утомлении).
Кажется, что должен быть лучший способ установить базовый адрес для ELF при сборке, хотя я прибегну к ручному выполнению скрипта после сборки, если это будет необходимо. Эта опция дляld
было бы идеально, если бы он не был специфичен для порта PE:
--image-base value
Use value as the base address of your program or dll. This is the lowest
memory location that will be used when your program or dll is loaded. To
reduce the need to relocate and improve performance of your dlls, each should
have a unique base address and not overlap any other dlls. The default is
0x400000 for executables, and 0x10000000 for dlls. [This option is specific
to the i386 PE targeted port of the linker]
Я еще не нашел эквивалент ELF. Ничего не существует? Сам анализ файла ELF не станет концом света, но кажется, что эта функция должна где-то существовать.