我编写了一个脚本,使用ghidra中的此代码从PE提取所有汇编代码。
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]'