instructionList = []
for instr in currentProgram.getListing().getInstructions(True):
instructionList.append(instr)
,但问题是,这将更改汇编代码中的所有.DLL调用。
例如,如果列表窗口显示
CALL dword ptr [->MSVCRT.DLL::signal]
我得到的输出是
CALL dword ptr [EBP + -0x14]
是否有一种方法可以完全按照列表窗口中的方式获取汇编代码
#1 楼
因此,答案是在OP的票务#1994中提供的,只是将其转移给未来的寻找者:from ghidra.program.model.listing import CodeUnitFormat, CodeUnitFormatOptions
codeUnitFormat = CodeUnitFormat(CodeUnitFormatOptions(CodeUnitFormatOptions.ShowBlockName.ALWAYS,CodeUnitFormatOptions.ShowNamespace.ALWAYS,"",True,True,True,True,True,True,True))
instructionList = []
for instr in currentProgram.getListing().getInstructions(True):
instructionList.append(codeUnitFormat.getRepresentationString(inst))
#2 楼
阅读完帖子后我想到了这个,但找不到使它整洁干净的方法只记录思想过程,因为pawel创建了一个很好的答案
>>> inst = currentProgram.listing.getCodeUnitAt(currentAddress)
>>> print (inst,inst.getReferencesFrom()[1])
(CALL qword ptr [0x1c0007050], ->NTOSKRNL.EXE::EtwRegister)
编辑正则表达式替代黑客是我在想像下面放弃它之前的想法
>>> re.sub("\[.*\]",'['+inst.getReferencesFrom()[1].toString()+']',inst.toString())
u'CALL qword ptr [->NTOSKRNL.EXE::EtwRegister]'