【问题标题】:How to change the program path in Ghidra如何更改 Ghidra 中的程序路径
【发布时间】:2021-01-15 09:25:18
【问题描述】:

我有一个带有导入二进制文件的 Ghidra 项目,它是在计算机 A 上创建的,然后我想将此项目移动到计算机 B。但是,二进制文件的路径与 A 不同。如何我在 Ghidra 中更改了路径设置?

编辑: Error Message(黑块是计算机A中的原始路径。)

【问题讨论】:

  • 你是如何移动项目的? Ghidra 将拒绝不是在同一台机器上创建的项目,您必须使用File > Archive Current Project 或 Ghidra 服务器在计算机之间同步。还有你的意思是什么类型的路径设置?导入二进制文件后,计算机上的路径就不再重要了
  • 我刚刚将项目文件夹复制到计算机 B。我想更改路径设置的原因是因为我从源代码构建了一个包含 Ghidra 的新调试器,而 GDB 调试器需要原始二进制文件来运行调试过程.原来是这个问题。
  • 有趣的是,Ghidra 曾经拒绝像这样复制的文件夹,但也许这改变了。调试器集成是相当新的,仍然处于试验阶段,但我可以检查这个二进制文件路径的存储位置以及如何更改它,我实际上需要这些信息来处理其他一些事情,并且不知道 Ghidra 存储了这个。
  • 当这失败时你是否有一些具体的错误或堆栈跟踪?这将使我更容易找到代码库的相关部分
  • 是的,我已经更新了问题中的错误信息。

标签: ghidra


【解决方案1】:

Ghidra 似乎使用了来自 currentProgram.getExecutablePath() 的信息,该信息从项目内部与二进制信息一起存储的选项中获取值:

来自ghidra.program.database.ProgramDB#getExecutablePath的代码sn-p:

    @Override
    public String getExecutablePath() {
        String path = null;
        Options pl = getOptions(PROGRAM_INFO);
        path = pl.getString(EXECUTABLE_PATH, UNKNOWN);
        return path == null ? UNKNOWN : path;
    }

    @Override
    public void setExecutablePath(String path) {
        Options pl = getOptions(PROGRAM_INFO);
        pl.setString(EXECUTABLE_PATH, path);
        changed = true;
    }

要改变这一点,您应该能够简单地使用相应的setExecutablePath 方法,例如通过运行

currentProgram.setExecutablePath("/new/path/to/binary.elf")

在 Python REPL 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2014-08-30
    • 1970-01-01
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多