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