nasıl

2012-06-28 20 views
10

(ld komut dosyalarını kullanarak) 1 segmentinde 2 bölümleri koymak için aşağıdaki bağlayıcı komut dosyası vardır:nasıl

SECTIONS { 

    .arora_exec_free_space 4399531 : 
    { 
     *(.text) 
     *(.rodata) 
     *(.data.rel.ro.local) 
    } 
    .arora_data_free_space (ADDR(.arora_exec_free_space) + SIZEOF(.arora_exec_free_space)) : AT (7592352) 
    { 
     *(.data) 
     *(.bss) 
     *(.got) 
    } 
} 

benim programı derlerken iki bölüm (exec ve veri) farklı YÜK segmentlerinde bulunmaktadır. İki bölümü (.arora_data_free_space ve .arora_exec_free_space) bir LOAD segmentine koymak istiyorum. Linker komut dosyalarını kullanarak bunu yapmak için herhangi bir yolu var mı? Nasıl yapabilirim? Teşekkürler.

cevap

3

Elbette - sadece PHDRS kullanmanız gerekir. Bu bağlantıdaki örnek, tam olarak yapmak istediğiniz şeydir. İşte size bir (test edilmemiş) örnek: Bağlayıcı komut dosyanızdan:

PHDRS 
{ 
    mysegment PT_LOAD; 
} 

SECTIONS 
{ 
    .arora_exec_free_space 4399531 : 
    { 
        *(.text) 
        *(.rodata) 
        *(.data.rel.ro.local) 
    } :mysegment 

    .arora_data_free_space (ADDR(.arora_exec_free_space) + SIZEOF(.arora_exec_free_space)) : AT (7592352) 
    { 
        *(.data) 
        *(.bss) 
        *(.got) 
    } :mysegment 
} 
+0

PHDRS'yi kullanırken, ELF bölümlerinin geri kalanı silinir. Bu bölümleri bir segmente koymanın ve elf'in geri kalanını hiçbir değişiklik olmadan saklamanın bir yolunu arıyorum. – Jah

+0

Bağlantıyı okudunuz mu? "Bağlayıcı, varsayılan olarak makul program başlıkları oluşturacaktır. Ancak, bazı durumlarda, program başlıklarını daha kesin olarak belirtmeniz gerekebilir. Bu amaçla PHDRS komutunu kullanabilirsiniz. Bağlayıcı, linker komut dosyasında PHDRS komutunu gördüğünde, Belirtilenler dışındaki herhangi bir program başlığı oluşturmaz. " Diğerlerini oldukları gibi bırakmak isterseniz, bunları sadece PHDRS'inize eklemeniz gerekir. –