Trochu technictejsi dotaz

Michal Ludvig mic na cybeteria.cz
Sobota Červen 13 12:34:07 CEST 1998


Zdravim,
mam otazku ohledne strojaku. Mozna je to trochu off-toipc, ale ne snad
moc. 
Takze mam nasledujici vypis z gdb:

(gdb) x/16xb 0x112403
0x112403:	0x6a	0x01	0x53	0x56	0xe8	0xcd	0x01	0x00
0x11240b:	0x00	0x8d	0x65	0xf8	0x5b	0x5e	0xc9	0xc3
(gdb) x/9i 0x112403
0x112403:	pushl  $0x1
0x112405:	pushl  %ebx
0x112406:	pushl  %esi
0x112407:	call   0x1125d9
0x11240c:	leal   0xfffffff8(%ebp),%esp
0x11240f:	popl   %ebx
0x112410:	popl   %esi
0x112411:	leave  
0x112412:	ret    
(gdb) 

a vubec mi neni jasne, jak to ze instrukce 'call 0x1125d9' je prelozena 
na E8 CD 01 00 00. V jedny knizce jsem se docetl, ze opcode E8 CD znamena
relativni call s operandem 'rel32', ale at pocitam jak pocitam, tak jako
argument nachazim 01 00 00 a to zaprve neni 32 bitu a zadruhy at to
pricitam k aktualni adrese jak chci, tak rozhodne nedostanu 0x1125d9. 

Mohl by mi nekdo vysvetlit, jak to je a pripadne kde bych se dozvedel o
to, jak jsou jednotlive instrukce 'staveny' - napriklad jak se vytvari
opcode pro pushl a tak?

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).
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.

A kdyz jsme u toho, da se nejak zjistit opacne z pozice v souboru na jake
adrese bude dany kod pri behu?

Diky

Michal Ludvig



Další informace o konferenci Linux