-
-
[原创] IDA 7.0 IDAPython SetStrucAlign Bug 修复
-
发表于:
2020-3-27 18:05
4007
-
[原创] IDA 7.0 IDAPython SetStrucAlign Bug 修复
这种问题一般不会遇到,一般通过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)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-3-28 09:16
被tritium编辑
,原因: