通常我的结构是固定大小的。是否可以定义一个包含大小不同的元素的结构?

为了说明我的意思,这是什么。 this:

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


'Name'现在是一个C字符串,一直到它到达末尾0字节然后遵循align指令为止。因此,有可能告诉IDA该结构是否包含字符串,而不论字符串有多长?

评论

您确定这就是在代码中实际实现的方式吗?至少在c中,这将是您拥有某个固定大小的静态数组或一个指针的位置,该指针已为您的空间分配了空间。如果不是这种情况,则struct(再次考虑c,对不起)将必须为所有不同的大小使用不同的名称,或者采用某种结合。
是,我确定。顶部有一个计数器值,该计数器值指示有多少个条目,其后是这样的结构数组。

#1 楼

除非字符串在结构的末尾,否则尝试在IDA中创建此结构没有任何意义,因为它甚至可能不存在于C语言(或任何原始语言)中。现在,如果字符串位于结构的末尾,则可能与实际的C结构定义相关。这称为“零长度”数组或“柔性数组成员”。当然,就sizeof而言,该数组的大小为零。

不幸的是,这在IDA中仍然不存在。我过去所做的(再次是字符串的最后位置)是继续进行并创建一个一字节的字段,因此您至少知道字符串的起始位置。如果您尝试对代码中的任何常量使用size mystruct,这会使事情复杂化,但是至少您的字符串偏移量是正确的。