This program demonstrates basic structure manipulation.
#include <idc.idc> static main() { auto idx; for ( idx=GetFirstStrucIdx(); idx != -1; idx=GetNextStrucIdx(idx) ) { auto id,m; id = GetStrucId(idx); if ( id == -1 ) Fatal("Internal IDA error, GetStrucId returned -1!"); Message("Structure %s:\n",GetStrucName(id)); Message(" Regular comment: %s\n",GetStrucComment(id,0)); Message(" Repeatable comment: %s\n",GetStrucComment(id,1)); Message(" Size : %d\n",GetStrucSize(id)); Message(" Number of members : %d\n",GetMemberQty(id)); for ( m = 0; m != GetStrucSize(id); m = GetStrucNextOff(id,m) ) { auto mname; mname = GetMemberName(id,m); if ( mname == "" ) { Message(" Hole (%d bytes)\n",GetStrucNextOff(id,m)-m); } else { auto type; Message(" Member name : %s\n",GetMemberName(id,m)); Message(" Regular cmt : %s\n",GetMemberComment(id,m,0)); Message(" Rept. cmt : %s\n",GetMemberComment(id,m,1)); Message(" Member size : %d\n",GetMemberSize(id,m)); type = GetMemberFlag(id,m) & DT_TYPE; if ( type == FF_BYTE ) type = "Byte"; else if ( type == FF_WORD ) type = "Word"; else if ( type == FF_DWRD ) type = "Double word"; else if ( type == FF_QWRD ) type = "Quadro word"; else if ( type == FF_TBYT ) type = "Ten bytes"; else if ( type == FF_ASCI ) type = "ASCII string"; else if ( type == FF_STRU ) type = form("Structure '%s'",GetStrucName(GetMemberStrId(id,m))); else if ( type == FF_XTRN ) type = "Unknown external?!"; // should not happen else if ( type == FF_FLOAT ) type = "Float"; else if ( type == FF_DOUBLE ) type = "Double"; else if ( type == FF_PACKREAL ) type = "Packed Real"; else type = form("Unknown type %08X",type); Message(" Member type : %s",type); type = GetMemberFlag(id,m); if ( isOff0(type) ) Message(" Offset"); else if ( isChar0(type) ) Message(" Character"); else if ( isSeg0(type) ) Message(" Segment"); else if ( isDec0(type) ) Message(" Decimal"); else if ( isHex0(type) ) Message(" Hex"); else if ( isOct0(type) ) Message(" Octal"); else if ( isBin0(type) ) Message(" Binary"); Message("\n"); } } } Message("Total number of structures: %d\n",GetStrucQty()); }