Dotaz na funkcionalitu IDA
Pavel Troller
patrol@sinus.cz
Úterý Září 30 07:14:56 CEST 2008
Zdravím,
mám tu nějaký binární kód z '51 rodiny a snažím se vytvořit korektní
reference na datové zóny (někdy ale i rozskokové tabulky a další struktury
přímo v kódovém segmentu). Bohužel '51 je velmi omezený asm, prakticky
bez 16bit operací, a tak se často vyskytují např. tyto sekvence kódu:
MOV RAM_32,#0x12 ; High byte of source address
MOV RAM_33,#0x80 ; Low byte of source address
MOV RAM_34,#0xC2 ; High byte of dest address
MOV RAM_35,#0x24 ; Low byte of dest address
MOV RAM_36,#0x00 ; High byte of length
MOV RAM_37,#0x80 ; Low byte of length
LCALL COPY ; Copy from ROM to XRAM
Jak asi chápete, subrutina COPY používá adresy RAM 32-37 jako parametry pro
zadání bloku, který se má kopírovat.
Nyní jde o to, že tak, jak kód vypadá, IDA samozřejmě nevytvoří na adrese
1280 odkaz, že tato adresa je používána právě z tohoto místa, takže toto místo
v ROM zůstane jako nereferencované. Nápodobně není vyznačena cílová adresa
v zóně externí RAM.
Existuje nějaký trik, jak to, nejlépe hromadně, tomu programu vysvětlit, aby
byl schopen takto skryté reference najít ? Obvykle disassembluji z trošku
lepších platforem, kde jsou 16bitové a 32bitové operace samozřejmostí, takže
jsem se s tímhle problémem dosud nesetkal... Je to IDA 5.
S pozdravem Pavel Troller
Další informace o konferenci Hw-list