API

API_Name 功能 备注
idc.GetStrucQty() 获取结构体总数
idc.GetFirstStrucIdx() 获取第一个结构体的Index
idc.GetNextStrucIdx(indexCurStruct) 通过结构体的 Index 获取下个结构体的 Index
idc.GetStrucId(indexCurStruct) 通过 index 获取结构体的 ID
idc.GetStrucName(tidStruct) 通过结构体的 ID 获得 结构体名
idc.GetStrucSize(tidStruct) 通过结构体的 ID 获得 结构体总大小
idc.GetStrucComment(tidStruct, bool) 通过结构体的 ID 获得 结构体的注释 bool 表示获取的注释属性是否可重复

Example

  1. def walkStructure():
  2. """
  3. 遍历当前所有的结构体, 输出结构体主要信息
  4. :return: None
  5. """
  6. indexCurStruct = idc.GetFirstStrucIdx() # 获取第一个 struct 的 Index
  7. while True:
  8. tidStruct = idc.GetStrucId(indexCurStruct) # 获取 指定 index 的 structID
  9. strName = idc.GetStrucName(tidStruct) # 获得指定 structID 的名字
  10. dwStructSize = idc.GetStrucSize(tidStruct) # 获得 struct 的大小
  11. strStructCmt = idc.GetStrucComment(tidStruct, False) # 获取 struct 不可重复的 comment
  12. strStructCmt_Rep = idc.GetStrucComment(tidStruct, True) # 获取 struct 可重复的 comment
  13. dwStructCount = idc.GetStrucQty() # 获取当前 struct 总个数
  14. g_LogOut.info("All: %08X, Index: %08X, IDX: %08X, Size: %08X, Name: %s, Comment: %s, Comment_Rep: %s" %
  15. (dwStructCount, indexCurStruct, tidStruct, dwStructSize, strName, strStructCmt, strStructCmt_Rep))
  16. indexCurStruct = idc.GetNextStrucIdx(indexCurStruct)
  17. if indexCurStruct == idc.BADADDR:
  18. break