Zahada neexistujiciho souboru

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Sobota Květen 11 16:35:31 CEST 2013


On Sat, 11 May 2013, Leonardo wrote:

> Dne So 11. května 2013 13:18:53 Pavel Janík napsal(a):
>> head -1 /usr/firefox/firefox?
> ELF4~4  (444  TTT???y???y???y???       ???       4t???z???
>
> Tak z toho moc moudrý nejsem.

Zkuste ještě tento příkaz:

$ objdump -j .interp -s /usr/firefox/firefox

(Hmm... proč vlastně objdump -p vypisuje všechno možné, ale ne obsah
.interp?)

Dynamicky linkované ELFové programy jsou trochu jako skripty. V sekci 
.interp (*) může být odkaz na jiný program tzv. interpreter, což je 
obvykle dynamický linker, a jádro se pak de facto pokouší spustit tento 
interpreter, což může ale skončit s chybou (jako např. ENOENT), která je 
pak vrácena tomu, kdo provedl execve(), aniž by bylo možno rozlišit, zda 
se týká původního programu, nebo až interpreteru.

(*) Nebo přesněji v segmentu PT_INTERP, protože program má dvě 
alternativní struktury: segmenty (jejich tabulka se jmenuje program 
header), které popisují strukturu z hlediska toho, kdo chce program 
spustit a potřebuje vědět, co kam namapovat do paměti, a sekce, které 
reprezentují spíš logický pohled na věc. Obvykle je rozdělení souboru do 
sekcí zjemněním rozdělení na segmenty. Tabulka sekcí (section header) 
může v principu ve spustitelném soubboru chybět. Nebo by čistě hypoteticky 
přítomna být mohla, ale ukazovat na jiná místa než tabulka segmentů, a pak 
by objdump -j .interp ukazovalo špatná data. Pokud máte dojem, že po Vás 
jdou, tak to můžete zkontrolovat porovnání obou tabulek v objdump -x.

-- 
Pavel Kankovsky aka Peak                          / Jeremiah 9:21        \
"For death is come up into our MS Windows(tm)..." \ 21st century edition /


Další informace o konferenci Linux