这是个很简单的问题,但是我之前还是搞得不太清楚。在这里:https://blog.csdn.net/qysh123/article/details/117288885
我介绍了Ghidra的Eclipse插件的使用方法。这里再来简单讲讲新建和运行项目时的一些和路径相关的问题。和之前的博客中介绍的一样,可以选择GhidraDev——New——Ghidra Script Project来创建Ghidra项目,确定了项目名称和存储位置后,我们在下一个界面可以看到两个选项:"Link user home script directory"和"Link Ghidra installation script direcotires",可以把这两个选项都选上。应该主要注意一下第一个选项。我们在写自己的代码的时候,最好都放在新建项目的"Home scripts"这个目录下。这是由于运行Headless Mode的时候,从这里<GhidraInstallDir>/support/analyzeHeadlessREADME.html,我们可以看到,如果不指定scriptPath,那么
the Headless Analyzer will search the following paths for the specified script(s):
- $USER_HOME/ghidra_scripts
- All ghidra_script subdirectories that exist in the Ghidra distribution
这个其实很好理解,就是默认会搜索这两个目录下的脚本,而在创建项目的时候,由于Link user home script directory,所以已经把第一个目录下link到了新建的项目中。通过这样的设置,我们可以简化运行时候的命令行参数。
搞清楚了这些,我们可以参考网上的代码(例如:https://www.wenwenya.com/anquan/548577.html)来举个例子:
在Home scripts中新建这样一个类:
import ghidra.app.script.GhidraScript;
import ghidra.program.model.symbol.Symbol;
import ghidra.program.model.symbol.SymbolIterator;
import ghidra.program.model.symbol.SymbolTable;
public class SimpleTest extends GhidraScript {
@Override
public void run() throws Exception {
//TODO Add User Code Here
SymbolTable st = currentProgram.getSymbolTable();
SymbolIterator iter = st.getSymbolIterator(true);
int count = 0;
while (iter.hasNext() && !monitor.isCancelled()) {
Symbol sym = iter.next();
if (sym != null) {
printf("\t%s\n",sym.getName());
count++;
}
}
println(count+" symbols");
}
}
然后在Run configurations里输入类似于下面的命令行参数:
/home/yu/GhidraProjects/ SimpleTest -import /home/yu/test -postScript SimpleTest.java /home/yu/GhidraProjects/Output
我这里用的是自己机子上的目录,大家相应修改一下即可。分析的二进制文件是/home/yu/test,然后点击Run就可以看到结果了。就简单总结这么多。