Patří binární soubor s GNU ld vazebné skriptu

hlasů
22

Mám pracovní linker skript. Chci přidat další část dat, jehož obsah je tažena přímo ze souboru (ld by se jej nelze analyzovat a extrahovat úseky a tak dále). Jak to mohu udělat?

OUTPUT_FORMAT(elf32-i386)
ENTRY(start)
SECTIONS
{
  .text 0x100000 : {
    *(.multiboot)
    *(.text)
    *(.code)
    *(.rodata*)
  }
  .data : {
    *(.data)
  }
  .bss : {
    *(.bss)
  }
  kernel_end = .;
  roottask_start = .;
  .data : {

    HERE I WANT TO INCLUDE THE ENTIRE CONTENTS OF ANOTHER (BINARY) FILE

  }
  roottask_end = .;
}
Položena 29/11/2008 v 16:12
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
16

Mohli byste zkusit použít objcopyjej převést na běžný objekt můžete propojit, a pak odkazovat jeho symboly ve spojce skriptu, jako byste udělali na normální objektu. Z objcopymanuálové stránky :

-B bfdarch --binary architekturou = bfdarch užitečné při transformaci raw binární vstupní soubor do souboru objektu. V tomto případě může být výstup architektura nastaven na bfdarch. Tato volba bude ignorována, pokud je vstupní soubor má známý bfdarch. Můžete se na binární data uvnitř programu odkazem na speciální symboly, které jsou vytvořeny pomocí procesu konverze. Tyto symboly jsou nazývány _binary_objfile_start, _binary_objfile_enda _binary_objfile_size. například můžete proměnit obrazový soubor do cílového souboru a potom k ní přistupovat ve vašem kódu pomocí těchto symbolů.

... kde objfile bude rozšířen na jméno souboru vstupního objektu.

Viz také --rename-sectionmožnost.

Odpovězeno 30/11/2008 v 00:01
zdroj uživatelem

hlasů
6

Můžete dát syrové soubor na samostatný oddíl v sestavě, a poté zahrnout tuto sekci v linker skriptu.

Nejprve je nutné vytvořit šablonu .s soubor, např.

.section .rawdata
.incbin "blob1.raw"

... a měnit linker skript zařadit tento bod jako se vám to líbí:

.data : {

    *(.rawdata*)

}

Můžete se také podívat tady tu dobu trochu podrobnější informace o šabloně .s.

Odpovězeno 27/08/2013 v 14:52
zdroj uživatelem

hlasů
5

Dalším řešením je vytvoření druhé linker skript obsahující byty z binárního souboru pomocí BYTEfunkce, a pak jej zahrnout do bývalé linker skriptu pomocí INCLUDEdirektivy.

Můžete vygenerovat skript z vašeho binárního souboru pomocí hexdumpnásledujícím způsobem:

cat ramelfs | hexdump -v -e '"BYTE(0x" 1/1 "%02X" ")\n"' > ramelfs.ld

A pak to patří takto:

SECTIONS {
    .text : {

        /* ... */

        kramelfs = .;
        INCLUDE "ramelfs.ld" ;
        kramelfs_end = .;

       /* ... */
    }
}
Odpovězeno 15/12/2011 v 10:13
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more