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