Trochu technictejsi dotaz

Pavel Kankovsky peak na kerberos.troja.mff.cuni.cz
Pondělí Červen 15 16:28:02 CEST 1998


On Sat, 13 Jun 1998, Michal Ludvig wrote:

> A jeste mi dovolte jeden dotaz. Kdyz vim, ze tento kod je na adrese
> 0x112403, jak z toho zjistim kde je ulozen fyzicky v souboru toho
> programu? Vim, ze je to v tom programu (ne v zadny knihovne) a je to a.out
> format (file rika: Linux/i386 demand-paged executable (QMAGIC), stripped).

U a.out je to docela v pohode, protoze lokace v pameti je rovna lokaci
v souboru pro [ONZ]MAGIC, resp. lokaci v souboru + 4096 pro QMAGIC.
V pripade dllek je to slozitejsi o to, ze se loaduji az od adresy
0x6000000 + X, kde X je konstanta pro danou knihovnu.

U ELFu je to ponekud komplikovanejsi. U exacu se to da vyzkoumat z tabulky
segmentu (phdr), kde jsou trojice (poloha v souboru, poloha v pameti,
velikost); u dllek je nutno znat bazovou adresu, na kterou bylo
dllko nacteno do pameti.

> Samozrejme bych mohl prohledat ten soubor na vyse uvedenou posloupnost,
> ale to jde jen v pripade, ze je takhle dlouha. Kdyz se jedna treba o dve,
> tri kratke instrukce, tak jsem bez sance, protoze ty se tam vyskytuji
> mockrat.

Staci vzit dostatecne velke okoli. Ale pozor na pripadne relokace (to se 
muze stat, pokud nekdo vyrobi dllko z ne-PIC kodu).

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"You can't be truly paranoid unless you're sure they have already got you."



Další informace o konferenci Linux