Portál AbcLinuxu, 25. května 2025 18:06

Hrátky s elfem - obsah souboru v binárce

4.12.2007 07:00 | Přečteno: 1347× | Linux | Výběrový blog | poslední úprava: 4.12.2007 08:41

Předem varuju, že tenhle zápisek patří k těm převážně suplujícím pamět autora, ale někomu by se to přece jen mohlo hodit. Řeší problém zajištění toho, aby po spuštění binárky byla na určitém místě paměti data z konkrétního souboru, aniž by se pak ten soubor musel předávat s binárkou. Typické použítí je pokud chceme k virtuální mašině přidat i nějaký ten zdroják ke kompilování nebo už zkompilovaný dump. Konkrétní příklad a ukázka jak na to s malou implementací forthu (jonesforth): autor spouští pro získání forthového prostředí
cat jonesforth.f - |./jonesforth
Po drobné úpravě asemblerového zdrojáku a níže uvedeném slinkování stačí ./jonesforth. Hlavní trik, který budu nejspíš někdy hledat, je v linkování pomocí link scriptu (ld -T) s obsahem
INPUT(jonesforth.o)
TARGET(binary)
INPUT(jonesforth.f)
OUTPUT_FORMAT(elf32-i386)
OUTPUT(jonesforth)
ENTRY(_start)

PHDRS
{
        headers PT_PHDR PHDRS ;
        text PT_LOAD FILEHDR PHDRS ;
        forth PT_LOAD ;
        data PT_LOAD ;
}

SECTIONS
{
. = SIZEOF_HEADERS;
.text : { *(.text) } :text
.forth : {
        text_start = . ;
        jonesforth.f ;
        text_end = .;
         } :forth
. = 0x8000000;
.data : { *(.data) } :data
.bss : { *(.bss) }
}
kde jonesforth.o je výsledek kompilace assemblerového programu, jonesforth.f je soubor, který bude vložen, text_start a text_end jsou hodnoty použité v .o, které linker nataví na začátek a konec uložení souboru v paměti, a _start je začátek programu. Pokud umí někdo tohle jednodušeji, budu rád, pokud v diskusi ukáže jak.        

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

4.12.2007 14:31 petr_p | skóre: 59 | blog: pb
Rozbalit Rozbalit vše Re: Hrátky s elfem - obsah souboru v binárce
Odpovědět | Sbalit | Link | Blokovat | Admin
Pokud jde jen o přibalení dat do ELF, tak stačí použít objcopy --add-section forth=jonesforth.f jonesforth.

Ale jak se dostat za běhu té sekci nějak jednoduše, to netuším.
4.12.2007 14:52 Tom.š Ze.le.in | skóre: 21 | blog: tz
Rozbalit Rozbalit vše Re: Hrátky s elfem - obsah souboru v binárce
Tohle právě objcopy zřejmě neumí, to jsem zkoušel jako první

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.