Kysymys:
Järjestetäänkö ohjeet uudelleen ida-tietokantaan?
Guntram Blohm supports Monica
2014-08-19 17:01:34 UTC
view on stackexchange narkive permalink

Purkan vanhan (1996) pelin, joka on käännetty Watcom 386 -kääntäjällä. Tämä kääntäjä näyttää järjestävän ohjeet uudelleen aggressiivisesti hyödyntääkseen prosessoriputkistoa paremmin, kuten tässä kokoonpanokappaleessa nähdään:

enter image description here

Punaisella pisteellä merkityt ohjeet seuraavan puhelun parametrit; sinisellä pisteellä annetut ohjeet viimeistelevät edellisestä puhelusta palautetun objektin alustuksen. Niiden uudelleenjärjestely tekee kokoonpanon lukemisen helpommaksi:

  ... soita ClassAlloc13680_0FAhmov edx, [eax] mov [edx + Class180F4.WidgetInputHandler], offset gblHandleTransportDestinationAndCheckForPassengersSpacemov edx, [eax] 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. ..  

(Huomaa, että siirrin mov reg, xxh -ohjeet vielä alaspäin, koska kääntäjän kutsumiskäytäntö on ax-dx-cx-bx-stack , joten näen myös tässä argumenttien järjestyksen)

Onko IDA: ssa mahdollista saavuttaa tämä? En pyydä algoritmia määrittämään automaattisesti, joiden ohjeiden tulisi olla "punaisia" ja mitä "sinisiä", enkä halua korjata alkuperäistä binaaritiedostoa, haluaisin vain järjestää ohjeet uudelleen manuaalisesti ida-tietokannassa.

Vai onko jotain muuta tapaa parantaa tällaisen koodin luettavuutta IDA: ssa?

Voit kirjoittaa IDC / IDAPython-komentosarjan siirtääksesi valitut ohjeet ympäriinsä, esimerkiksi: valitset komentosarjan, kutsut komentosarjan, syötät tavujen määrän näiden ohjeiden siirtämiseksi alas / ylös, komentosarja järjestää ne uudelleen käyttämällä `PatchByte`-ohjelmaa tai vastaavaa komento.
Kirjoitin jokin aika sitten idc-komentosarjan tehdäksesi tämän varsi koodille: [swapinsn.idc] (http://nah6.com/~itsme/cvs-xdadevtools/ida/idcscripts/swapinsn.idc). Se kiertää insns-sarjan ylös tai alas ja korjaa kaikki suhteelliset hyppyjä tällä alueella
@WillemHengeveld: Voitteko vastata tähän? Se on 90% siitä, mitä tarvitsen, ja haluaisin antaa reppisteitä sinulle.
üks vastaus:
Willem Hengeveld
2014-08-22 14:33:26 UTC
view on stackexchange narkive permalink

Useita vuosia sitten kirjoitin swapinsn.idc tekemään tämän ARM-koodia varten. Se kiertää insns-sarjan ylös tai alas ja korjaa kaikki suhteelliset hyppyjä tällä alueella.

Huomaa, että toisin kuin komentosarjassa olevat kommentit, en ole koskaan lisännyt x86-tukea.

Lisäsin mukavuuden vuoksi pikanäppäintoiminnot HK_ExchangeDown ja HK_ExchangeUp sellaisina kuin ne on määritelty hotkeys.idc: ssä. x siirtää viimeksi valitun insn ylös ja loput alas.

BTW, minulla ei ole kannettavaa tietokonetta juuri nyt, ensi viikolla voisin todennäköisesti lisätä x86-tuen


Tämä Q & A käännettiin automaattisesti englanniksi.Alkuperäinen sisältö on saatavilla stackexchange-palvelussa, jota kiitämme cc by-sa 3.0-lisenssistä, jolla sitä jaetaan.
Loading...