Otázka:
IDA nerozpoznává křížové odkazy
heinrich5991
2013-05-29 00:21:45 UTC
view on stackexchange narkive permalink

V pohledu IDA vidím ( glb_SomeVar je bajtové pole):

  cmp al, glb_SomeVar + 22h  

Ale když stisknu x , abych našel křížové odkazy glb_SomeVar, najdu jen dvě další shody ve stejné funkci:

  cmp al, glb_SomeVar + 0Ahcmp al, glb_SomeVar + 0Bh  

Existuje způsob, jak to opravit, například nechat IDA znovu analyzovat vybranou funkci nebo dokonce celý kód? Myslím, že na jiných místech také chybí křížové odkazy.

Dva odpovědi:
Igor Skochinsky
2013-05-29 01:27:20 UTC
view on stackexchange narkive permalink

Upravit -> Globální -> Křížové odkazy -> Hloubka křížového odkazu. Zvýšení podle potřeby.

Z dokumentace:

  Tato hodnota „kolik bajtů objektu se má podívat, aby shromáždilo křížové odkazy“. Například máme pole: A db 100 dup (0) Pokud se nějaká instrukce vztahuje k 5. prvku pole: mov al, A + 5 s TD = 3, nebudeme mít žádné xrefs zobrazené s TD = 10 my Budu mít tento parametr IDA.CFG xref: MAX_TAIL  

„TD“ zde odkazuje na „hloubku ocasu“ (starý název nastavení)

Ooooh tuto funkci neznal. dík
Jeffrey LeCours
2015-12-20 11:35:06 UTC
view on stackexchange narkive permalink

Myslím, že výchozí hodnota v IDA 6.8 je hloubka křížového odkazu 16. Zvýšil jsem to nejprve na 32 a poté na 1024 a poté na 65535 (protože proč ne). Nic z toho nevedlo k tomu, že můj xref pracoval podle přání, takže nesmím něčemu rozumět.

Analyzuji soubor ARM ELF sdílených objektů. Funkce, na kterou se dívám, je volána funkcí, na kterou odkazuje offset v segmentu .init_array (nejste si jisti, zda je to relevantní). Posun, který chci vidět všechny odkazy, je:

  .bss: 00424778; void * dword_424778.bss: 00424778 dword_424778% 4  

Původně byl identifikován jako unk_424778, ale stiskl jsem Y a nastavil typ na „void *“.

Hex Rays zobrazuje toto přiřazení:

  dword_424778 = &_sF;  

Pomocí HexRaysCodeXplorer stiskem J skočíte zpět k demontáži z Hex Rays. Dostalo mě to na řádek 0026D69C:

  .... text: 0026D668 LDR R5, [R4, R2]; unk_424758.text: 0026D66C ADD R0, R5, # 0x1C. text: 0026D670 STMIA R5, {R3, R7} .text: 0026D674 STR R7, [R5, # 8] .text: 0026D678 STR R7, [R5, # 0xC] .text: 0026D67C STR R7, [R5, # 0x10]. text: 0026D680 STR R7, [R5, # 0x14] .text: 0026D684 STR R7, [R5, # 0x18] .text: 0026D688 BL sub_26F42C. text: 0026D68C LDR R2, = (off_374A30 - 0x374C20) .text: 0026D690 LDR R3, [SP, # 0x38 + var_34] .text: 0026D694 STR R9, [R5] .text: 0026D698 STR R8, [R5, # 0x24] .text: 0026D69C STR R11, [R5, # 0x20] ...  

ARM moc dobře neznám, ale četl jsem, že STMIA R5, {R3, R7} bude mít za následek nepředvídatelné chování kvůli do reglistu ({R3, R7}) začínajícího registrem s nižším číslem než Rn (R5).

Může problém souviset s tím, že dword_424778 je v sekci .bss?



Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...