首页
社区
课程
招聘
[原创] IDA 7.0 IDAPython SetStrucAlign Bug 修复
发表于: 2020-3-27 18:05 4006

[原创] IDA 7.0 IDAPython SetStrucAlign Bug 修复

2020-3-27 18:05
4006
这种问题一般不会遇到,一般通过Local Type插入自定义结构时,可以指定对齐。
当我们需要定制一些结构成员的特殊形式属性时,才需要通过IDC或IDAPython定制我们的结构,也方便脚本自动加载我们自己的类型库。
这时在IDAPython中使用set_struc_align 或 SetStrucAlign就会遇到这个问题。

struct __unaligned __declspec(align(1)) xstru001
{
  int m_dw;
  void *m_ptr;
  __int16 m_w;
  char m_b;
};

struct __unaligned __declspec(align(1)) xstru001
{
  int m_dw;
  void *m_ptr;
  __int16 m_w;
  char m_b;
};

在IDC中我们的 原型为
set_struc_align(sid,shift)
set_struc_align(sid,shift)
IDAPython的原型为
 ida_struct.set_struc_align(struct_t*,shift)
 ida_struct.set_struc_align(struct_t*,shift)
其重构的SetStrucAlign也受影响
import ida_struct
ida_struct.set_struc_align(sid,2)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-34-8f6de1ef173c> in <module>()
----> 1 ida_struct.set_struc_align(sid,2)

C:\IDA 7.0\python\ida_struct.pyc in set_struc_align(*args)
    481   set_struc_align(sptr, shift) -> bool
    482   """
--> 483   return _ida_struct.set_struc_align(*args)
    484 
    485 def set_struc_name(*args):

TypeError: in method 'set_struc_align', argument 1 of type 'struc_t *'

import ida_struct
ida_struct.set_struc_align(sid,2)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-34-8f6de1ef173c> in <module>()
----> 1 ida_struct.set_struc_align(sid,2)

C:\IDA 7.0\python\ida_struct.pyc in set_struc_align(*args)
    481   set_struc_align(sptr, shift) -> bool
    482   """
--> 483   return _ida_struct.set_struc_align(*args)
    484 
    485 def set_struc_name(*args):

TypeError: in method 'set_struc_align', argument 1 of type 'struc_t *'

出现 set_struc_align 的IDAPython位置如下所示
----------------------------------------
C:\IDA 7.0\python\ida_struct.py(479): def set_struc_align(*args):
C:\IDA 7.0\python\ida_struct.py(481):   set_struc_align(sptr, shift) -> bool
.\IDA 7.0\python\ida_struct.py(483):   return _ida_struct.set_struc_align(*args)
找到 'set_struc_align' 3 次。
----------------------------------------
C:\IDA 7.0\python\idc_bc695.py(294): def SetStrucAlign(sid, shift): return set_struc_align(sid, shift)
找到 'set_struc_align' 1 次。
搜索完成,找到 'set_struc_align' 4 次。(2 个文件)。

def SetStrucAlign(sid, shift): return set_struc_align(sid, shift)

----------------------------------------
C:\IDA 7.0\python\ida_struct.py(479): def set_struc_align(*args):
C:\IDA 7.0\python\ida_struct.py(481):   set_struc_align(sptr, shift) -> bool
.\IDA 7.0\python\ida_struct.py(483):   return _ida_struct.set_struc_align(*args)
找到 'set_struc_align' 3 次。
----------------------------------------
C:\IDA 7.0\python\idc_bc695.py(294): def SetStrucAlign(sid, shift): return set_struc_align(sid, shift)
找到 'set_struc_align' 1 次。
搜索完成,找到 'set_struc_align' 4 次。(2 个文件)。

def SetStrucAlign(sid, shift): return set_struc_align(sid, shift)

【使用get_struct 替代方案】
ida_struct.set_struc_align(ida_struct.get_struc(sid),shift)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-3-28 09:16 被tritium编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 171
活跃值: (519)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2020-3-27 23:21
0
雪    币: 3738
活跃值: (3872)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2020-10-13 01:59
0
游客
登录 | 注册 方可回帖
返回
//