Tématické skupiny v rámci předmětu PB173 Tematicky zaměřený vývoj aplikací v jazyce C/C++

Téma 3: Binární objektové soubory

Teoretická část

  • Popis objektových souborů
  • Přehled jejich formátů
  • ELF a jeho struktura
  • Knihovna libbfd a její použití

Praktický úkol pro cvičení

  • Práce s binárními formáty
  • Práce s libbfd

Domácí úkol

  • Vytvořte program, který bude pracovat s binárními soubory
  • Bude akceptovat parametry na příkazové řádce
    • Jeden parametr (soubor): výstup se bude podobat co nejvíce objdump -f -h
      • Navíc, pokud se v libovolných sekcích najdou řetězce hello a world, vypíše se informace o tom, že jde pravděpodobně o hello world program
      • Musí to fungovat opravdu i pro void hello() { puts("world"); }
    • Dva parametry (vstup a vystup): projdou se všechny .data sekce souboru vstup a všechny, které obsahují text hello se zkopírují do souboru vystup do stejně pojmenované sekce a hello se změní na holla
      • Vytvořte sekci .comment.my_objcopy s libovolným obsahem
  • Pokud se něco někde nezdaří, vypíše se chyba a program se korektně ukončí
  • V nově vytvořeném souboru musíte nastavit format a arch_info
    • Nejlépe zkopírovat z původního
  • Při vytváření sekce použijte bfd_make_section_with_flags s SEC_HAS_CONTENTS
    • Potom je třeba nastavit velikost sekce a nahrát data
  • POZOR: SEC_HAS_CONTENTS ve flags u sekcí musíte kontrolovat před použitím bfd_get_section_contents()
  • Při vytváření více sekcí musíte nejdříve vytvořit všechny tyto sekce a potom až tyto sekce plnit daty. Jinak libbfd nefunguje.