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