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

Téma 5: ELF a libelf II.

Teoretická část

  • ELF a jeho struktura
  • Obsah sekcí
  • Programové hlavičky
  • libelf

Praktický úkol pro cvičení

  • Práce s libelf

Domácí úkol

  • Napište jednoduchý ELF loader
  • Načtěte z pb173-bin/05 přeloženou ELF binárku to_load a tu spusťte
  • Projděte programové hlavičky
  • Všechny s typem LOAD nahrajte do paměti
    • Ze souboru z offsetu p_offset
    • Do paměti na adresu p_vaddr + nějaký pevný offset (např. 0x100000000)
      • Použijte mmap s prvním parametrem ne-NULL
      • mmap vyžaduje adresu zarovnanou na velikost stránky (sysconf(_SC_PAGESIZE))
      • Uvažte správné vlaječky čtení-zápis-spuštění, dle p_flags a PF_R, PF_W, PF_X
      • Také uvažte, že potřebujete do oblasti vy zapsat
    • O velikosti p_filesz
  • Skočte na vstupní adresu
    • Z ELF hlavičky e_entry
    • Ale nezapomeňte přičíst vámi zvolený offset (0x100000000)
  • Ověřte pomocí strace, že se vykonávají (nevalidní) syscally od č. 10000