从java api获取函数的Ghidra中的堆栈引用

逆向工程 吉德拉
2021-06-11 21:29:08

如何通过 Java Plugin API 访问一个函数对堆栈(也在其框架之外)的所有引用

示例:此指令在函数的堆栈帧之外写入值

在此处输入图片说明

我需要遍历函数的CFG吗?(如果是,我该怎么做?)

1个回答

我在github上问了这个问题,得到了如下回复:

假设已经执行了堆栈分析并且函数已经用堆栈引用标记,如上所示,您可以迭代“来自”函数主体(即,AddressSetView)的引用。返回的引用需要过滤,因为其他类型的引用也将被返回。虽然获取引用的方法有很多种,这里举一个例子:

Function f;
Program p;
ReferenceManager refMgr = p.getReferenceManager();
    for (Address fromAddr : refMgr.getReferenceSourceIterator(f.getBody(), true)) {
        for (Reference ref : refMgr.getReferencesFrom(fromAddr)) {
            if (ref.isStackReference()) {
                StackReference stackRef = (StackReference) ref;
            }
        }
}

重要的部分是您的分析必须在堆栈分析发生之后进行,这已经很晚了。您可以通过将要运行的点传递到父构造函数中来控制分析何时在构造函数中运行。