在 IDA 中创建一个包含 cString 的结构?

逆向工程 艾达 结构
2021-06-28 22:48:31

通常 I struct 是固定大小。是否可以定义包含具有不同大小的元素的结构?

为了说明我的意思是这样的。

文件中数据的布局如下所示:

ID          WORD 0
FunctionPtr DWORD OFFSET Fkt
Name        db 'Name of the function',0
align 4

'Name' 现在是一个 C 字符串,它的长度与末尾的 0 字节一样长,然后跟随着对齐指令。那么是否有可能告诉 IDA 该结构包含字符串,无论它有多长?

2个回答

除非字符串在结构末尾,否则尝试在 IDA 中创建这个结构是没有意义的,因为它甚至可能不存在于 C(或任何原始语言)中。

现在,如果字符串在该结构的末端,这可能关联到一个实际的C结构的定义。这称为“零长度”数组或“灵活数组成员”当然,就目前而言,这个数组的大小为零sizeof

不幸的是,这在 IDA 中仍然不存在。我过去所做的(同样,字符串是最后一个)是继续创建一个一字节的字段,所以你至少知道字符串的开始位置。如果您尝试使用size mystruct代码中的任何常量,这将使事情变得复杂,但至少您的字符串偏移量是正确的。

IDA 介绍了“可变长度结构”,并通过一个非常直接的教程描述了它的用法

简而言之,您需要确保“灵活”项是结构的最后一项,并将其定义为大小为 0 的数组。为此,定义一个新的结构成员char Name,单击它并按*然后,将“数组大小”设置为 0。

现在,缺点是 IDA 不会查找空终止符来定义字符串,而是每次要使用该结构时都必须告诉它它的大小。