IDA sdk 删除用户结构成员防止创建间隙

逆向工程 艾达 C++
2021-07-10 06:25:53

我在使用 IDA SDK 功能时遇到问题del_struc_member(struc_t *sptr, ea_t offset)

如果我在成员上使用它,它会在偏移量上创建一个间隙 [4](对于 dword 类型),它不会重新计算结构,也不会缩小它。

如果我使用 SDK 中的另一个函数,expand_struc(struc_t *sptr, ea_t offset, adiff_t delta, bool recalc=true);就像这样expand_struc(struc, 4, -4, true)

它确实删除了成员并缩小了它,但它删除了后面的其他间隙(需要的)加上它改变了其他成员的类型,例如:

之前

  int field_1204;
  _BYTE gap4B8[4];
  int field_1212;

之后

  int field_1204;
  __declspec(align(8)) int field_1212;

如果我通过 CTRL+E 手动删除成员,它会缩小并且不会因删除间隙而产生此问题。

删除结构成员并缩小它的正确方法是什么?PS 也许我应该为所有其他正确的间隙设置新类型,然后才删除我不需要的成员并缩小 struct 。或者如果它的数组会产生同样的问题?

0个回答
没有发现任何回复~