Sto smontando un vecchio (1996) gioco, che è stato compilato con il compilatore Watcom 386. Questo compilatore sembra riordinare in modo aggressivo le istruzioni per fare un uso migliore della pipeline del processore, come si vede in questo pezzo di assembly:
Le istruzioni contrassegnate da un punto rosso sono impostate i parametri per la prossima chiamata; le istruzioni con un punto blu terminano l'inizializzazione dell'oggetto restituito dalla chiamata precedente. Riorganizzarli rende l'assembly molto più facile da leggere:
... chiama ClassAlloc13680_0FAhmov edx, [eax] mov [edx + Class180F4.WidgetInputHandler], offset gblHandleTransportDestinationAndCheckForPassengersSpacemov edx, [eax] mov [edx] Class13680.Paint ???], offset ClassVehicleManager__PaintForSomeWidgetmov dword_A4D88, eaxmov eax, [eax] mov [eax + Class10B8C.MouseInputHandler], offset ClassVehicleManager__MouseInputHandlerpush 0push 2push 0push 4Ehpush 5Bhmov ebx, 5Chmov ecx, 21hmov edx, ebpmov eax, ebpcall ClassAlloc13680_0FAhpush 0push 2. ..
(Nota che ho spostato le istruzioni mov reg, xxh
ancora più in basso, perché la convenzione di chiamata del compilatore è ax-dx-cx-bx-stack , quindi posso vedere anche l'ordine degli argomenti qui)
C'è un modo per farlo in IDA? Non sto chiedendo un algoritmo per determinare automaticamente quali istruzioni dovrebbero essere "rosse" e quali dovrebbero essere "blu", e non voglio patchare il file binario originale, vorrei solo riorganizzare manualmente le istruzioni nel database ida.
O c'è un altro modo per migliorare la leggibilità di questo tipo di codice in IDA?