-postscript
标志允许输入分析脚本。我有一个正常工作的Java脚本。但是,我想使用python 3进行分析。我想像这样运行:./analyzeHeadless ghidra-project-directory -import binary-file -postscript yourpythonscript
是否可以运行python脚本进行分析?另外,是否有任何文档可用于执行此操作?
编辑:
我编写了以下脚本,它确实可以正常工作(但它不能给我
发现DecompInterface的错误):
import ghidra.app.util.headless.HeadlessScript;
import ghidra.app.decompiler.ClangNode;
import ghidra.app.decompiler.ClangToken;
import ghidra.app.decompiler.ClangLine;
import ghidra.app.decompiler.ClangTokenGroup;
import ghidra.app.decompiler.DecompInterface;
import ghidra.app.decompiler.DecompileResults;
import ghidra.program.model.address.Address;
import ghidra.program.model.listing.CodeUnit;
import ghidra.program.model.listing.Function;
import ghidra.program.model.listing.FunctionIterator;
import ghidra.program.model.listing.InstructionIterator;
import ghidra.program.model.listing.Program;
import ghidra.program.model.listing.Variable;
import ghidra.program.model.pcode.HighFunction;
import ghidra.program.model.pcode.HighSymbol;
import ghidra.program.model.pcode.HighVariable;
import ghidra.program.model.pcode.LocalSymbolMap;
import ghidra.program.model.pcode.PcodeOp;
import ghidra.program.model.pcode.Varnode;
import ghidra.program.model.symbol.Symbol;
import ghidra.program.model.symbol.Reference;
import ghidra.program.model.symbol.ReferenceIterator;
import ghidra.util.task.ConsoleTaskMonitor;
args = getScriptArgs()
print(args)
p = currentProgram
print(p)
filename = "/projects/zephyr/Ruturaj/ghidra_learning/" + p.getName() + ".txt"
print(filename)
#di = DecompInterface()
#print(di)
#1 楼
我发现python脚本可以与无头分析器脚本一起使用。使用以下命令可以运行它,就像java文件一样:
./analyzeHeadless ghidra-project-directory -import binary-file -postscript yourpythonscript
显然为Java定义的所有类都可以直接在python脚本中使用。
特定类可以与
from import statements
一起导入,例如在Java中如下所示:import ghidra.program.model.listing.Variable;
并使用python:
from ghidra.program.model.listing import Variable;
导入
variable
类。可以像Java一样导入变量类(请参见上面的import语句)。但是,那么您必须使用整个路径名来访问它。例如:something = ghidra.program.model.listing.Variable()
因此,总而言之,可以通过导入类而使用python编写相同的脚本,而不会出现任何问题。希望这对某人有所帮助。
编辑:
正如@igor在评论中所说,它仅适用于python 2.7(因为ghidra
依赖于
Jython
)。对于python 3.x,可以使用ghidra_bridge
之类的东西。
评论
AFAIK Ghidra依靠不支持Python 3的Jython。您必须使用Python2。谢谢@IgorSkochinsky,我会在答案中记下这一点