Skip to content
This repository was archived by the owner on Jul 8, 2025. It is now read-only.

Commit ad85663

Browse files
author
William Ballenthin
committed
idapython: fix routine names for IDA7 compat
ref: https://www.hex-rays.com/products/ida/7.0/docs/api70_porting_guide.shtml
1 parent ccb453c commit ad85663

File tree

2 files changed

+95
-103
lines changed

2 files changed

+95
-103
lines changed

idb/idapython.py

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ def IdbByte(self, ea):
591591

592592
def Head(self, ea):
593593
flags = self.GetFlags(ea)
594-
while not self.api.ida_bytes.isHead(flags):
594+
while not self.api.ida_bytes.is_head(flags):
595595
ea -= 1
596596
# TODO: handle Index/KeyError here when we overrun a segment
597597
flags = self.GetFlags(ea)
@@ -600,12 +600,12 @@ def Head(self, ea):
600600
def ItemSize(self, ea):
601601
oea = ea
602602
flags = self.GetFlags(ea)
603-
if not self.api.ida_bytes.isHead(flags):
603+
if not self.api.ida_bytes.is_head(flags):
604604
raise ValueError('ItemSize must only be called on a head address.')
605605

606606
ea += 1
607607
flags = self.GetFlags(ea)
608-
while flags is not None and not self.api.ida_bytes.isHead(flags):
608+
while flags is not None and not self.api.ida_bytes.is_head(flags):
609609
ea += 1
610610
# TODO: handle Index/KeyError here when we overrun a segment
611611
flags = self.GetFlags(ea)
@@ -614,7 +614,7 @@ def ItemSize(self, ea):
614614
def NextHead(self, ea):
615615
ea += 1
616616
flags = self.GetFlags(ea)
617-
while flags is not None and not self.api.ida_bytes.isHead(flags):
617+
while flags is not None and not self.api.ida_bytes.is_head(flags):
618618
ea += 1
619619
# TODO: handle Index/KeyError here when we overrun a segment
620620
flags = self.GetFlags(ea)
@@ -975,7 +975,7 @@ def is_func(flags):
975975
return flags & FLAGS.MS_CODE == FLAGS.FF_FUNC
976976

977977
@staticmethod
978-
def isImmd(flags):
978+
def has_immd(flags):
979979
return flags & FLAGS.MS_CODE == FLAGS.FF_IMMD
980980

981981
@staticmethod
@@ -1000,7 +1000,7 @@ def is_unknown(flags):
10001000

10011001
@staticmethod
10021002
def is_head(flags):
1003-
return ida_bytes.isCode(flags) or ida_bytes.isData(flags)
1003+
return ida_bytes.is_code(flags) or ida_bytes.is_data(flags)
10041004

10051005
@staticmethod
10061006
def is_flow(flags):
@@ -1094,11 +1094,11 @@ def is_double(flags):
10941094
return flags & FLAGS.DT_TYPE == FLAGS.FF_DOUBLE
10951095

10961096
@staticmethod
1097-
def isPackReal(flags):
1097+
def is_pack_real(flags):
10981098
return flags & FLAGS.DT_TYPE == FLAGS.FF_PACKREAL
10991099

11001100
@staticmethod
1101-
def isASCII(flags):
1101+
def is_strlit(flags):
11021102
return flags & FLAGS.DT_TYPE == FLAGS.FF_ASCI
11031103

11041104
@staticmethod
@@ -1109,10 +1109,6 @@ def is_struct(flags):
11091109
def is_align(flags):
11101110
return flags & FLAGS.DT_TYPE == FLAGS.FF_ALIGN
11111111

1112-
@staticmethod
1113-
def is_3_byte(flags):
1114-
return flags & FLAGS.DT_TYPE == FLAGS.FF_3BYTE
1115-
11161112
@staticmethod
11171113
def is_custom(flags):
11181114
return flags & FLAGS.DT_TYPE == FLAGS.FF_CUSTOM
@@ -1479,13 +1475,13 @@ def _find_bb_end(self, ea):
14791475
if flags == 0:
14801476
return last_ea
14811477

1482-
if self.api.ida_bytes.hasRef(flags):
1478+
if self.api.ida_bytes.has_ref(flags):
14831479
return last_ea
14841480

1485-
if self.api.ida_bytes.isFunc(flags):
1481+
if self.api.ida_bytes.is_func(flags):
14861482
return last_ea
14871483

1488-
if not self.api.ida_bytes.isFlow(flags):
1484+
if not self.api.ida_bytes.is_flow(flags):
14891485
return last_ea
14901486

14911487
if not is_empty(idb.analysis.get_crefs_from(self.idb, ea,
@@ -1502,10 +1498,10 @@ def _find_bb_start(self, ea):
15021498
'''
15031499
while True:
15041500
flags = self.api.idc.GetFlags(ea)
1505-
if self.api.ida_bytes.hasRef(flags):
1501+
if self.api.ida_bytes.has_ref(flags):
15061502
return ea
15071503

1508-
if self.api.ida_bytes.isFunc(flags):
1504+
if self.api.ida_bytes.is_func(flags):
15091505
return ea
15101506

15111507
last_ea = ea
@@ -1515,15 +1511,15 @@ def _find_bb_start(self, ea):
15151511
types=[idaapi.fl_JN, idaapi.fl_JF, idaapi.fl_F])):
15161512
return last_ea
15171513

1518-
if not self.api.ida_bytes.isFlow(flags):
1514+
if not self.api.ida_bytes.is_flow(flags):
15191515
return last_ea
15201516

15211517
def _get_flow_preds(self, ea):
15221518
# this is basically CodeRefsTo with flow=True.
15231519
# need to fixup the return types, though.
15241520

15251521
flags = self.api.idc.GetFlags(ea)
1526-
if flags is not None and self.api.ida_bytes.isFlow(flags):
1522+
if flags is not None and self.api.ida_bytes.is_flow(flags):
15271523
# prev instruction fell through to this insn
15281524
yield idb.analysis.Xref(self.api.idc.PrevHead(ea), ea, idaapi.fl_F)
15291525

@@ -1539,7 +1535,7 @@ def _get_flow_succs(self, ea):
15391535

15401536
nextea = self.api.idc.NextHead(ea)
15411537
nextflags = self.api.idc.GetFlags(nextea)
1542-
if nextflags is not None and self.api.ida_bytes.isFlow(nextflags):
1538+
if nextflags is not None and self.api.ida_bytes.is_flow(nextflags):
15431539
# instruction falls through to next insn
15441540
yield idb.analysis.Xref(ea, nextea, idaapi.fl_F)
15451541

@@ -1871,7 +1867,7 @@ def Functions(self):
18711867
def CodeRefsTo(self, ea, flow):
18721868
if flow:
18731869
flags = self.api.idc.GetFlags(ea)
1874-
if flags is not None and self.api.ida_bytes.isFlow(flags):
1870+
if flags is not None and self.api.ida_bytes.is_flow(flags):
18751871
# prev instruction fell through to this insn
18761872
yield self.api.idc.PrevHead(ea)
18771873

@@ -1885,7 +1881,7 @@ def CodeRefsFrom(self, ea, flow):
18851881
if flow:
18861882
nextea = self.api.idc.NextHead(ea)
18871883
nextflags = self.api.idc.GetFlags(nextea)
1888-
if self.api.ida_bytes.isFlow(nextflags):
1884+
if self.api.ida_bytes.is_flow(nextflags):
18891885
# instruction falls through to next insn
18901886
yield nextea
18911887

tests/test_idaapi.py

Lines changed: 77 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -90,20 +90,20 @@ def test_state(kernel32_idb, version, bitness, expected):
9090
# .text:68901010 8B FF mov edi, edi
9191
# .text:68901012 55 push ebp
9292
flags = idc.GetFlags(0x68901010)
93-
assert ida_bytes.isCode(flags) is True
94-
assert ida_bytes.isData(flags) is False
95-
assert ida_bytes.isTail(flags) is False
96-
assert ida_bytes.isNotTail(flags) is True
97-
assert ida_bytes.isUnknown(flags) is False
98-
assert ida_bytes.isHead(flags) is True
93+
assert ida_bytes.is_code(flags) is True
94+
assert ida_bytes.is_data(flags) is False
95+
assert ida_bytes.is_tail(flags) is False
96+
assert ida_bytes.is_not_tail(flags) is True
97+
assert ida_bytes.is_unknown(flags) is False
98+
assert ida_bytes.is_head(flags) is True
9999

100100
flags = idc.GetFlags(0x68901011)
101-
assert ida_bytes.isCode(flags) is False
102-
assert ida_bytes.isData(flags) is False
103-
assert ida_bytes.isTail(flags) is True
104-
assert ida_bytes.isNotTail(flags) is False
105-
assert ida_bytes.isUnknown(flags) is False
106-
assert ida_bytes.isHead(flags) is False
101+
assert ida_bytes.is_code(flags) is False
102+
assert ida_bytes.is_data(flags) is False
103+
assert ida_bytes.is_tail(flags) is True
104+
assert ida_bytes.is_not_tail(flags) is False
105+
assert ida_bytes.is_unknown(flags) is False
106+
assert ida_bytes.is_head(flags) is False
107107

108108

109109
@kern32_test()
@@ -114,17 +114,17 @@ def test_specific_state(kernel32_idb, version, bitness, expected):
114114
# .text:68901010 8B FF mov edi, edi
115115
# .text:68901012 55 push ebp
116116
flags = idc.GetFlags(0x68901010)
117-
assert ida_bytes.isFlow(flags) is False
118-
assert ida_bytes.isVar(flags) is False
119-
assert ida_bytes.hasExtra(flags) is True
117+
assert ida_bytes.is_flow(flags) is False
118+
assert ida_bytes.is_var(flags) is False
119+
assert ida_bytes.has_extra_cmts(flags) is True
120120
assert ida_bytes.has_cmt(flags) is False
121-
assert ida_bytes.hasRef(flags) is True
121+
assert ida_bytes.has_ref(flags) is True
122122
assert ida_bytes.has_name(flags) is True
123123
assert ida_bytes.has_dummy_name(flags) is False
124124

125125
# .text:68901044 FF 70 18 push dword ptr [eax+18h] ; HeapHandle
126126
flags = idc.GetFlags(0x68901044)
127-
assert ida_bytes.isFlow(flags) is True
127+
assert ida_bytes.is_flow(flags) is True
128128
assert ida_bytes.has_cmt(flags) is True
129129

130130

@@ -136,12 +136,12 @@ def test_code(kernel32_idb, version, bitness, expected):
136136
# .text:68901010 8B FF mov edi, edi
137137
# .text:68901012 55 push ebp
138138
flags = idc.GetFlags(0x68901010)
139-
assert ida_bytes.isFunc(flags) is True
140-
assert ida_bytes.isImmd(flags) is False
139+
assert ida_bytes.is_func(flags) is True
140+
assert ida_bytes.has_immd(flags) is False
141141

142142
flags = idc.GetFlags(0x68901012)
143-
assert ida_bytes.isFunc(flags) is False
144-
assert ida_bytes.isImmd(flags) is False
143+
assert ida_bytes.is_func(flags) is False
144+
assert ida_bytes.has_immd(flags) is False
145145

146146

147147
@kern32_test()
@@ -151,75 +151,71 @@ def test_data(kernel32_idb, version, bitness, expected):
151151

152152
# text:689011EB 90 90 90 90 90 90 90 90+ align 20h
153153
flags = idc.GetFlags(0x689011eb)
154-
assert ida_bytes.isByte(flags) is False
155-
assert ida_bytes.isWord(flags) is False
156-
assert ida_bytes.isDwrd(flags) is False
157-
assert ida_bytes.isQwrd(flags) is False
158-
assert ida_bytes.isOwrd(flags) is False
159-
assert ida_bytes.isYwrd(flags) is False
160-
assert ida_bytes.isTbyt(flags) is False
161-
assert ida_bytes.isFloat(flags) is False
162-
assert ida_bytes.isDouble(flags) is False
163-
assert ida_bytes.isPackReal(flags) is False
164-
assert ida_bytes.isASCII(flags) is False
165-
assert ida_bytes.isStruct(flags) is False
166-
assert ida_bytes.isAlign(flags) is True
167-
assert ida_bytes.is3byte(flags) is False
168-
assert ida_bytes.isCustom(flags) is False
154+
assert ida_bytes.is_byte(flags) is False
155+
assert ida_bytes.is_word(flags) is False
156+
assert ida_bytes.is_dword(flags) is False
157+
assert ida_bytes.is_qword(flags) is False
158+
assert ida_bytes.is_oword(flags) is False
159+
assert ida_bytes.is_yword(flags) is False
160+
assert ida_bytes.is_tbyte(flags) is False
161+
assert ida_bytes.is_float(flags) is False
162+
assert ida_bytes.is_double(flags) is False
163+
assert ida_bytes.is_pack_real(flags) is False
164+
assert ida_bytes.is_strlit(flags) is False
165+
assert ida_bytes.is_struct(flags) is False
166+
assert ida_bytes.is_align(flags) is True
167+
assert ida_bytes.is_custom(flags) is False
169168

170169
# .text:68901497 90 90 90 90 90 db 5 dup(90h)
171170
flags = idc.GetFlags(0x68901497)
172-
assert ida_bytes.isByte(flags) is True
173-
assert ida_bytes.isWord(flags) is False
174-
assert ida_bytes.isDwrd(flags) is False
175-
assert ida_bytes.isQwrd(flags) is False
176-
assert ida_bytes.isOwrd(flags) is False
177-
assert ida_bytes.isYwrd(flags) is False
178-
assert ida_bytes.isTbyt(flags) is False
179-
assert ida_bytes.isFloat(flags) is False
180-
assert ida_bytes.isDouble(flags) is False
181-
assert ida_bytes.isPackReal(flags) is False
182-
assert ida_bytes.isASCII(flags) is False
183-
assert ida_bytes.isStruct(flags) is False
184-
assert ida_bytes.isAlign(flags) is False
185-
assert ida_bytes.is3byte(flags) is False
186-
assert ida_bytes.isCustom(flags) is False
171+
assert ida_bytes.is_byte(flags) is True
172+
assert ida_bytes.is_word(flags) is False
173+
assert ida_bytes.is_dword(flags) is False
174+
assert ida_bytes.is_qword(flags) is False
175+
assert ida_bytes.is_oword(flags) is False
176+
assert ida_bytes.is_yword(flags) is False
177+
assert ida_bytes.is_tbyte(flags) is False
178+
assert ida_bytes.is_float(flags) is False
179+
assert ida_bytes.is_double(flags) is False
180+
assert ida_bytes.is_pack_real(flags) is False
181+
assert ida_bytes.is_strlit(flags) is False
182+
assert ida_bytes.is_struct(flags) is False
183+
assert ida_bytes.is_align(flags) is False
184+
assert ida_bytes.is_custom(flags) is False
187185

188186
# .text:6893A7BC 24 83 98 68 dd offset sub_68988324
189187
flags = idc.GetFlags(0x6893a7bc)
190-
assert ida_bytes.isByte(flags) is False
191-
assert ida_bytes.isWord(flags) is False
192-
assert ida_bytes.isDwrd(flags) is True
193-
assert ida_bytes.isQwrd(flags) is False
194-
assert ida_bytes.isOwrd(flags) is False
195-
assert ida_bytes.isYwrd(flags) is False
196-
assert ida_bytes.isTbyt(flags) is False
197-
assert ida_bytes.isFloat(flags) is False
198-
assert ida_bytes.isDouble(flags) is False
199-
assert ida_bytes.isPackReal(flags) is False
200-
assert ida_bytes.isASCII(flags) is False
201-
assert ida_bytes.isStruct(flags) is False
202-
assert ida_bytes.isAlign(flags) is False
203-
assert ida_bytes.is3byte(flags) is False
204-
assert ida_bytes.isCustom(flags) is False
188+
assert ida_bytes.is_byte(flags) is False
189+
assert ida_bytes.is_word(flags) is False
190+
assert ida_bytes.is_dword(flags) is True
191+
assert ida_bytes.is_qword(flags) is False
192+
assert ida_bytes.is_oword(flags) is False
193+
assert ida_bytes.is_yword(flags) is False
194+
assert ida_bytes.is_tbyte(flags) is False
195+
assert ida_bytes.is_float(flags) is False
196+
assert ida_bytes.is_double(flags) is False
197+
assert ida_bytes.is_pack_real(flags) is False
198+
assert ida_bytes.is_strlit(flags) is False
199+
assert ida_bytes.is_struct(flags) is False
200+
assert ida_bytes.is_align(flags) is False
201+
assert ida_bytes.is_custom(flags) is False
205202

206203
# .text:6893A840 42 69 41 63 74 69 76 61+aBiactivatework db 'BiActivateWorkItem',0
207204
flags = idc.GetFlags(0x6893a840)
208-
assert ida_bytes.isByte(flags) is False
209-
assert ida_bytes.isWord(flags) is False
210-
assert ida_bytes.isDwrd(flags) is False
211-
assert ida_bytes.isQwrd(flags) is False
212-
assert ida_bytes.isOwrd(flags) is False
213-
assert ida_bytes.isYwrd(flags) is False
214-
assert ida_bytes.isTbyt(flags) is False
215-
assert ida_bytes.isFloat(flags) is False
216-
assert ida_bytes.isDouble(flags) is False
217-
assert ida_bytes.isPackReal(flags) is False
218-
assert ida_bytes.isASCII(flags) is True
219-
assert ida_bytes.isStruct(flags) is False
220-
assert ida_bytes.isAlign(flags) is False
221-
assert ida_bytes.is3byte(flags) is False
222-
assert ida_bytes.isCustom(flags) is False
205+
assert ida_bytes.is_byte(flags) is False
206+
assert ida_bytes.is_word(flags) is False
207+
assert ida_bytes.is_dword(flags) is False
208+
assert ida_bytes.is_qword(flags) is False
209+
assert ida_bytes.is_oword(flags) is False
210+
assert ida_bytes.is_yword(flags) is False
211+
assert ida_bytes.is_tbyte(flags) is False
212+
assert ida_bytes.is_float(flags) is False
213+
assert ida_bytes.is_double(flags) is False
214+
assert ida_bytes.is_pack_real(flags) is False
215+
assert ida_bytes.is_strlit(flags) is True
216+
assert ida_bytes.is_struct(flags) is False
217+
assert ida_bytes.is_align(flags) is False
218+
assert ida_bytes.is_custom(flags) is False
223219

224220

225221
@kern32_test()

0 commit comments

Comments
 (0)