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.
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.
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);
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 () # ... # ... # ...