Mengakses String Panggilan Instruksi Pcode CALLOTHER melalui Java API?

Oct 05 2020

Apakah ada cara untuk mengakses string panggilan dari instruksi Pcode CALLOTHER saat melakukan iterasi melalui Pcode di Java? Daftar di bawah ini menunjukkan contoh dari apa yang saya maksud:

048
                             LAB_0001b034                                    XREF[1]:     0001b024(j)  
        0001b034 36 7f ff e6     rbit       r7,r6
                                                      r7 = CALLOTHER "ReverseBitOrder", r6

Dalam contoh ini, saya ingin mendapatkan string "ReverseBitOrder".
Sayangnya, tidak ada petunjuk dalam info instruksi kecuali untuk objek input ini:

const:0x3c

Yang tidak diterjemahkan ke dalam string yang diberikan dan saya juga tidak dapat mengklik string tersebut untuk menemukan lokasi di memori. Saya juga melihat-lihat dokumen API Pcode, Instruksi, dll., Tetapi tidak menemukan sesuatu yang berguna.

Jawaban

1 mumbel Oct 05 2020 at 23:04

Ada ghidra_script yang saat ini melakukan ini, lihat https://github.com/NationalSecurityAgency/ghidra/blob/master/Ghidra/Features/Base/ghidra_scripts/MarkCallOtherPcode.java

pada dasarnya:

op = getInstructionAt(toAddr(0x1b034)).getPcode()[0]
currentProgram.getLanguage().getUserDefinedOpName(op.getInput(0).getOffset()))