Kysymys:
Ghidra Control -vuokaavio
Benny
2019-03-18 01:28:24 UTC
view on stackexchange narkive permalink

Käytän viime aikoina Ghidraa, enkä löydä sovellusliittymää saadaksesi tietyn funktion ohjauskaavion. Voiko joku auttaa minua?

Kiitos etukäteen.

MUOKKAA: se eroaa toisesta kysymyksestä ( linkki), koska pyydän API.

Mahdollinen kopio [Kuinka näyttää funktion CFG Ghidrassa?] (Https://reverseengineering.stackexchange.com/questions/20791/how-to-display-the-cfg-of-a-function-in-ghidra )
Muokkain. Pyydän API: ta, joten se ei ole kopio.
Hei ja tervetuloa RE.SE: lle! Voisitko tarkentaa, mitä haluat tehdä vuokaavioilla? Layout? Luo oma? Api on melko laaja http://ghidra.re/ghidra_docs/api/index-all.html
Hei! Annettuna funktio, minun on purettava sen CFG laskemaan sen reunat ja solmut syklomaattisen monimutkaisuuden ja muiden mittareiden laskemiseksi. Selasin jo Ghidran dokumentaatiota, mutta en löytänyt tarvitsemani.
Käytin calcCyclomaticComplexity-funktiota laskettaessa syklomaattinen monimutkaisuus, mutta en löytänyt yhtään sovellusliittymää, joka luo nimenomaisesti ohjauksen vuokaavion, josta voin purkaa solmut ja reunat.
üks vastaus:
Mauricio Sanfilippo
2019-05-17 01:02:55 UTC
view on stackexchange narkive permalink

Etsin samaa ja toistaiseksi löysin luokan PcodeSyntaxTree, jolla on menetelmä nimeltä getBasicBlocks (), joka palauttaa joukon PcodeBlockBasic-elementtejä. Tässä toisessa luokassa on menetelmiä, kuten getIn ja getOut, jotka hakevat vastaavasti saapuvat ja lähtevät solmut (peruslohkot). Joten mielestäni näiden menetelmien käyttämisen pitäisi olla käyttöliittymä vuorovaikutuksessa CFG: n kanssa ohjelmallisesti. Mutta valitettavasti en vielä selvittänyt, kuinka hankkia tämä PcodeSyntaxTree-objekti, mutta jatkan tutkimista.

Toivon, että tämä voi auttaa sinua hieman!

linkit: http : //ghidra.re/ghidra_docs/api/ghidra/program/model/pcode/PcodeSyntaxTree.html http://ghidra.re/ghidra_docs/api/ghidra/program/model/pcode/PcodeBlockBasic .html

PS: Toinen asia, jonka voit tehdä, on tutkia calcCyclomaticComplexity-menetelmän koodi, joka käyttää tätä BasickBlock-mallia. Luulen, että teen sen todennäköisesti.

EDIT: mielestäni hyviä uutisia. Löysin luokan DecompleResults, jolla on menetelmä getHighFunction (), joka palauttaa HighFunction-objektin. HighFunction-luokka ulottuu PcodeSyntaxTreeen, joten sillä on myös getBasicBlocks-menetelmä. Siitä lähtien voit jatkaa.

DecompileResults-luokka sisältyy ghidra.app.decompiler -ohjelmaan sekä DecompInterface, jolla on menetelmä decompileFunction (), joka palauttaa DecompileResults-objektin. > Lähettäjä https://github.com/NationalSecurityAgency/ghidra/blob/master/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompInterface.java:

  // Soittaminen kääntäjälle: // * DecompileResults res = ifc.decompileFunction (func, 0, taskmonitor);  

linkit: https: //github.com/NationalSecurityAgency/ghidra/blob/master/Ghidra/Features/Decompiler/src/main/java/ghidra/app/decompiler/DecompInterface.java

https : //ghidra.re/ghidra_docs/api/ghidra/app/decompiler/DecompileResults.html https://ghidra.re/ghidra_docs/api/ghidra/program/model/pcode/HighFunction.html

MUOKKAA 2:

Voin kuvitella jotain tällaista (python-apissa):

  tuo ghidra.app.decompiler nimellä decompinterface = decomp.DecompInterface () # decompileFunction (function, timeout, monitor) # mukaan dokumentaatioon funktio on Funktio-objekti, aikakatkaisu on int, # ja näyttö on TaskMonitor-tyypin VALINNAINEN ARGUMENTTI. # Se ei kuitenkaan sano mitään tämän argumentin oletusarvosta # ja kutsun argin jättäminen putoaa virheeksi.results = interface.decompileFunction (func, 0, taskMonitor) hf = results.getHighFunction () bbList = hf.getBasicBlocks () # ... # ... # ...  
Hienoa, autoit minua paljon, kiitos paljon!
Ole hyvä! btw, löysin toisen hyödyllisen tiedon, tarkista tämä vastaus ilmoitetusta ongelmasta: https://github.com/NationalSecurityAgency/ghidra/issues/444#issuecomment-484287997 Käytän kyseistä lohkomallia, koska en pystynyt selvittämään vielä kuinka luoda ja määrittää DecompInterface-luokan ilmentymä oikein
@MauricioSanfilippo teki yllä olevan koodin sinulle. Käytin TaskMonitor.DUMMY: tä kolmannen parametrin kohdalla ja läpäisin Function-objektin, mutta mitään ei purettu minulle. Löysitkö ratkaisun?
@hEShaN En, en kyennyt selvittämään kuinka käyttää DecompInterface-ohjelmaa. Mutta valitsin SimpleBlockModel-lähestymistavan, joka toimi minulle hyvin ja se näyttää olevan vielä yksinkertaisempi. Voit lukea https://github.com/NationalSecurityAgency/ghidra/issues/444#issuecomment-484287997Loin joitain komentosarjoja saadaksesi kaavion ja kulkeaksesi sen läpi, voin jakaa ne kanssasi, jos haluat. Se on enimmäkseen tapauskohtaista, mutta se toimi, ehkä voit parantaa niitä, jos ne eivät toimi sinulle tällä hetkellä
Kiitos paljon. Onko sinulla linkkiä näihin komentosarjoihin. Kiitos taas!


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