Broken navigation with nested anonymous structures

未关闭
#8,558 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
52/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
cpp

调研方向

Start by reproducing the nested anonymous-structure and union examples in the types view, then inspect the HLIL/MLIL tokens and their typeNames as described. Trace how double-click navigation resolves those tokens, including data variables, and consider the issue done when inner fields navigate to their definitions.

由索引模型根据 Issue 内容生成。

描述

Component: UI Effort: Low Impact: Medium UI: Types

Version and Platform (required):

  • Binary Ninja Version: 6.1.10668-dev
  • Edition: Ultimate
  • OS: macOS
  • OS Version: 27.0
  • CPU Architecture: M5

Bug Description:
Trying to navigate to a field nested in one or more anonymous structures fails to navigate.

Steps To Reproduce:

Structure:
struct foo {
    int pad;
    struct {
        int bar;
    } inner;
};

Code (x86 Windows):
int32_t sub_0(struct foo* arg1)
mov     eax, dword [esp+0x4]
mov     eax, dword [eax+0x4]
retn

HLIL:
return arg1->inner.bar

Trying to double click bar fails to navigate to the field. Looking at the token itself:

>>> current_il_instruction.tokens[-1].typeNames
['bar']

The token doesn't have valid type information for figuring out how to navigate to it.

Making it a union instead:

union foo_u
{
    struct
    {
        int32_t a;
        int32_t b;
    } bar;
};

Function type:
int32_t sub_0(union foo_u* arg1)

HLIL (broken):
return arg1->bar.__offset(0x4).d

MLIL:
eax = eax_1->bar.b

Double clicking b in MLIL also fails to navigate. The token for this:

>>> current_il_instruction.tokens[-1].typeNames
['foo_u', 'bar', 'b']

These two types also fail to navigate when made into data variables.

Expected Behavior:
Double clicking the inner field of these structures should navigate to that field in the types view.

主要语言
C++
星标
1.3k
派生
298
平均合并
5 天 5 小时
30 天内合并 PR
19

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

Vector35/binaryninja-api 的其他 Issue

查看 Vector35/binaryninja-api 的全部 Issue

相似的 Issue

更多 C++ Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。