我有一个包含数组(和其他元素)的结构,其中一个元素实际上是数组的大小。有没有办法在 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 |
(.........) |
我有一个包含数组(和其他元素)的结构,其中一个元素实际上是数组的大小。有没有办法在 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 |
(.........) |
Ghidra 灵活阵列支持您尝试执行的操作。来自 Ghidra 帮助(搜索“灵活数组”):
通过添加由基本数据类型(例如 char)指定的最后一行,然后调用数组操作并指定元素计数为 0,将灵活数组添加到结构的末尾。
所以你不能一步创建一个灵活的数组。首先输入可变长度结构成员的数据类型。然后选择该新结构成员所在的行并按下[键以调用数组操作。在结果对话框中输入 0 作为元素计数将创建一个灵活的数组。
Ghidra 灵活阵列的功能有限。来自 Ghidra 的帮助:
灵活数组组件的使用当前未反映在反编译器结果或列表引用标记中。其主要目的是反映具有正确对齐和结构大小调整的结构的 C/C++ 源定义。
虽然 C/C++ 支持结构内任何位置的灵活数组,但 Ghidra 仅支持它是最后一个结构组件的情况。