我可以使用MakeArray制作一个数组。

是否有一个函数来获取我创建的数组的大小?

我尝试了GetArrayId + GetLastIndex但它没有似乎没有用。

评论

您可以添加尝试过的示例C或汇编代码吗?

“大小”是指总字节大小还是元素数?

@IgorSkochinsky,实际上我正试图两者兼而有之。

@Biswapriyo。我没有示例C或汇编代码,但是可以尝试使用MakeArray(ea,10)之类的方法来创建数组,然后使用GetArrayID + GetLastIndex。

#1 楼

数组是数据项的示例。像IDA中的所有项目(另一个项目类型是指令)一样,它具有起始地址(头)和大小。您可以使用函数get_item_size()(旧名称ItemSize())检索整个项目的大小。

要计算数组中的项目数,可以将整个数组的大小除以一个元素的大小。但是如何知道元素的大小?为此,您需要使用get_flags()函数检查项目的标志(附加到头字节)。基本项目类型在DT_TYPE位(标志的前4位)定义的位中编码,并采用FF_BYTE(字节),FF_WORD(字),FF_DWORD等值。但是,您可以使用函数get_data_elsize()来从标志中返回字节大小,而不是手动检查位。

有关更多信息,请检查SDK中的bytes.hpp标头。

评论


谢谢@IgorSkochinsky。这正是我所做的!几乎... s_id = GetVarStrucId(ea)s_size = GetStrucSize(s_id)item_size = idaapi.get_item_size(ea)num_elements = s_size / item_size

–sololevelingreverser
19年8月15日在13:15



是的,如果您的项目是结构,则需要获取结构ID以确定其大小

–伊戈尔·斯科钦斯基♦
19年8月15日在13:20