Elegancki sposób na ustawienie adresu bazowego obrazu ELF w binutils Linuksa?

W przypadku projektu osobistego muszę napisać plik wykonywalny, który ładuje się na adres pamięci inny niż domyślny. Zto pytanie TAK, Wiem, że mogę ustawić adres wejścia dla ELF i ręcznie zmodyfikować adresy sekcji, aby plik wykonywalny był efektywnie oparty na wybranym przeze mnie adresie. Jednak odpowiedź sugeruje, że działa to tylko wtedy, gdy nie inicjuję glibc (czego potrzebuję do tego projektu), a ustawienie adresów pamięci sekcji za każdym razem, gdy kompiluję, byłoby trudne (nie wspominając o żmudnym).

Wygląda na to, że powinien być lepszy sposób na ustawienie adresu bazowego dla ELF podczas budowania, chociaż w razie potrzeby uciekam się do tego ręcznie. Ta opcja dlald byłoby idealnie, gdyby nie było specyficzne dla portu 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]

Nie znalazłem jeszcze odpowiednika ELF. Nie istnieje? Sama analiza pliku ELF nie byłaby końcem świata, ale wydaje się, że ta funkcja powinna gdzieś istnieć.

questionAnswers(1)

yourAnswerToTheQuestion