我在使用 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 。或者如果它的数组会产生同样的问题?