是否可以在 Ghidra 中定义可变大小的数组(结构本身的大小)

逆向工程 吉德拉
2021-07-01 20:34:09

我有一个包含数组(和其他元素)的结构,其中一个元素实际上是数组的大小。有没有办法在 Ghidra 中定义这样的结构?

16          | Size of array is 0x16 
00 
00 
04
00 00 00 00
10 08 0a 04
...
dc c1 50 08 |
74 cf 50 08 | Array of size 0x16
14 dd 50 08 |
(.........) |
1个回答

Ghidra 灵活阵列支持您尝试执行的操作。来自 Ghidra 帮助(搜索“灵活数组”):

通过添加由基本数据类型(例如 char)指定的最后一行,然后调用数组操作并指定元素计数为 0,将灵活数组添加到结构的末尾。

所以你不能一步创建一个灵活的数组。首先输入可变长度结构成员的数据类型。然后选择该新结构成员所在的行并按下[键以调用数组操作。在结果对话框中输入 0 作为元素计数将创建一个灵活的数组。

Ghidra 灵活阵列的功能有限。来自 Ghidra 的帮助:

灵活数组组件的使用当前未反映在反编译器结果或列表引用标记中。其主要目的是反映具有正确对齐和结构大小调整的结构的 C/C++ 源定义。

虽然 C/C++ 支持结构内任何位置的灵活数组,但 Ghidra 仅支持它是最后一个结构组件的情况。