mirror of
https://github.com/cemu-project/idapython.git
synced 2024-12-27 10:11:53 +01:00
- Fixed issue 59
- Fixed idaapi.msg() / error() and warning() so they don't accept vararg - Fixed processor_t.id constants - idaapi.BasicBlock and FlowChart are now new-style classes
This commit is contained in:
parent
1bd58bda60
commit
63b22d00d5
@ -4113,7 +4113,7 @@ def ChooseFunction(title):
|
||||
@return: -1 - user refused to select a function
|
||||
otherwise returns the selected function start address
|
||||
"""
|
||||
return idaapi.choose_func(title)
|
||||
return idaapi.choose_func(title, idaapi.BADADDR)
|
||||
|
||||
|
||||
def GetFuncOffset(ea):
|
||||
|
47
swig/gdl.i
47
swig/gdl.i
@ -25,37 +25,43 @@
|
||||
%pythoncode %{
|
||||
#<pycode(py_gdl)>
|
||||
# -----------------------------------------------------------------------
|
||||
class BasicBlock:
|
||||
class BasicBlock(object):
|
||||
"""Basic block class. It is returned by the Flowchart class"""
|
||||
def __init__(self, id, bb, f):
|
||||
self._f = f
|
||||
def __init__(self, id, bb, fc):
|
||||
self._fc = fc
|
||||
|
||||
self.id = id
|
||||
"""Basic block ID"""
|
||||
|
||||
self.startEA = bb.startEA
|
||||
"""startEA of basic block"""
|
||||
|
||||
self.endEA = bb.endEA
|
||||
"""endEA of basic block"""
|
||||
self.type = self._f._q.calc_block_type(self.id)
|
||||
|
||||
self.type = self._fc._q.calc_block_type(self.id)
|
||||
"""Block type (check fc_block_type_t enum)"""
|
||||
|
||||
|
||||
def preds(self):
|
||||
"""
|
||||
Iterates the predecessors list
|
||||
"""
|
||||
q = self._f._q
|
||||
for i in xrange(0, self._f._q.npred(self.id)):
|
||||
yield self._f[q.pred(self.id, i)]
|
||||
q = self._fc._q
|
||||
for i in xrange(0, self._fc._q.npred(self.id)):
|
||||
yield self._fc[q.pred(self.id, i)]
|
||||
|
||||
|
||||
def succs(self):
|
||||
"""
|
||||
Iterates the successors list
|
||||
"""
|
||||
q = self._f._q
|
||||
q = self._fc._q
|
||||
for i in xrange(0, q.nsucc(self.id)):
|
||||
yield self._f[q.succ(self.id, i)]
|
||||
yield self._fc[q.succ(self.id, i)]
|
||||
|
||||
# -----------------------------------------------------------------------
|
||||
class FlowChart:
|
||||
class FlowChart(object):
|
||||
"""
|
||||
Flowchart class used to determine basic blocks.
|
||||
Check ex_gdl_qflow_chart.py for sample usage.
|
||||
@ -67,25 +73,34 @@ class FlowChart:
|
||||
@param bounds: A tuple of the form (start, end). Used if "f" is None
|
||||
@param flags: one of the FC_xxxx flags. One interesting flag is FC_PREDS
|
||||
"""
|
||||
if (not f) and (not bounds or type(bounds) != types.TupleType):
|
||||
if (f is None) and (bounds is None or type(bounds) != types.TupleType):
|
||||
raise Exception("Please specifiy either a function or start/end pair")
|
||||
if not bounds:
|
||||
|
||||
if bounds is None:
|
||||
bounds = (BADADDR, BADADDR)
|
||||
# create the flowchart
|
||||
|
||||
# Create the flowchart
|
||||
self._q = qflow_chart_t("", f, bounds[0], bounds[1], flags)
|
||||
self.size = self._q.size()
|
||||
|
||||
size = property(lambda self: self._q.size())
|
||||
"""Number of blocks in the flow chart"""
|
||||
|
||||
|
||||
def refresh():
|
||||
"""Refreshes the flow chart"""
|
||||
self._q.refresh()
|
||||
self.size = self._q.size()
|
||||
|
||||
|
||||
def __getitem__(self, index):
|
||||
"""
|
||||
Returns a basic block
|
||||
|
||||
@return: BasicBlock
|
||||
"""
|
||||
if index >= self.size:
|
||||
raise StopIteration
|
||||
return BasicBlock(index, self._q[index], self)
|
||||
else:
|
||||
return BasicBlock(index, self._q[index], self)
|
||||
|
||||
#</pycode(py_gdl)>
|
||||
%}
|
||||
|
@ -8,6 +8,16 @@
|
||||
%ignore del_menu_item;
|
||||
%rename (del_menu_item) py_del_menu_item;
|
||||
%ignore vwarning;
|
||||
|
||||
%ignore msg;
|
||||
%rename (msg) py_msg;
|
||||
|
||||
%ignore warning;
|
||||
%rename (warning) py_warning;
|
||||
|
||||
%ignore error;
|
||||
%rename (error) py_error;
|
||||
|
||||
%ignore vinfo;
|
||||
%ignore vnomem;
|
||||
%ignore vmsg;
|
||||
@ -61,6 +71,21 @@
|
||||
%rename (_askseg) askseg;
|
||||
|
||||
%inline %{
|
||||
int py_msg(const char *format)
|
||||
{
|
||||
return msg("%s", format);
|
||||
}
|
||||
|
||||
void py_warning(const char *format)
|
||||
{
|
||||
warning("%s", format);
|
||||
}
|
||||
|
||||
void py_error(const char *format)
|
||||
{
|
||||
error("%s", format);
|
||||
}
|
||||
|
||||
void refresh_lists(void)
|
||||
{
|
||||
callui(ui_list);
|
||||
|
119
swig/ua.i
119
swig/ua.i
@ -1101,65 +1101,66 @@ OP_SP_ADD = 0x00000000 # operand value is added to the pointer
|
||||
OP_SP_SUB = 0x00000002 # operand value is substracted from the pointer
|
||||
|
||||
# processor_t.id
|
||||
PLFM_386 = 0x0 # Intel 80x86
|
||||
PLFM_Z80 = 0x1 # 8085, Z80
|
||||
PLFM_I860 = 0x2 # Intel 860
|
||||
PLFM_8051 = 0x3 # 8051
|
||||
PLFM_TMS = 0x4 # Texas Instruments TMS320C5x
|
||||
PLFM_6502 = 0x5 # 6502
|
||||
PLFM_PDP = 0x6 # PDP11
|
||||
PLFM_68K = 0x7 # Motoroal 680x0
|
||||
PLFM_JAVA = 0x8 # Java
|
||||
PLFM_6800 = 0x9 # Motorola 68xx
|
||||
PLFM_ST7 = 0x10 # SGS-Thomson ST7
|
||||
PLFM_MC6812 = 0x11 # Motorola 68HC12
|
||||
PLFM_MIPS = 0x12 # MIPS
|
||||
PLFM_ARM = 0x13 # Advanced RISC Machines
|
||||
PLFM_TMSC6 = 0x14 # Texas Instruments TMS320C6x
|
||||
PLFM_PPC = 0x15 # PowerPC
|
||||
PLFM_80196 = 0x16 # Intel 80196
|
||||
PLFM_Z8 = 0x17 # Z8
|
||||
PLFM_SH = 0x18 # Renesas (formerly Hitachi) SuperH
|
||||
PLFM_NET = 0x19 # Microsoft Visual Studio.Net
|
||||
PLFM_AVR = 0x20 # Atmel 8-bit RISC processor(s)
|
||||
PLFM_H8 = 0x21 # Hitachi H8/300, H8/2000
|
||||
PLFM_PIC = 0x22 # Microchip's PIC
|
||||
PLFM_SPARC = 0x23 # SPARC
|
||||
PLFM_ALPHA = 0x24 # DEC Alpha
|
||||
PLFM_HPPA = 0x25 # Hewlett-Packard PA-RISC
|
||||
PLFM_H8500 = 0x26 # Hitachi H8/500
|
||||
PLFM_TRICORE = 0x27 # Tasking Tricore
|
||||
PLFM_DSP56K = 0x28 # Motorola DSP5600x
|
||||
PLFM_C166 = 0x29 # Siemens C166 family
|
||||
PLFM_ST20 = 0x30 # SGS-Thomson ST20
|
||||
PLFM_IA64 = 0x31 # Intel Itanium IA64
|
||||
PLFM_I960 = 0x32 # Intel 960
|
||||
PLFM_F2MC = 0x33 # Fujistu F2MC-16
|
||||
PLFM_TMS320C54 = 0x34 # Texas Instruments TMS320C54xx
|
||||
PLFM_TMS320C55 = 0x35 # Texas Instruments TMS320C55xx
|
||||
PLFM_TRIMEDIA = 0x36 # Trimedia
|
||||
PLFM_M32R = 0x37 # Mitsubishi 32bit RISC
|
||||
PLFM_NEC_78K0 = 0x38 # NEC 78K0
|
||||
PLFM_NEC_78K0S = 0x39 # NEC 78K0S
|
||||
PLFM_M740 = 0x40 # Mitsubishi 8bit
|
||||
PLFM_M7700 = 0x41 # Mitsubishi 16bit
|
||||
PLFM_ST9 = 0x42 # ST9+
|
||||
PLFM_FR = 0x43 # Fujitsu FR Family
|
||||
PLFM_MC6816 = 0x44 # Motorola 68HC16
|
||||
PLFM_M7900 = 0x45 # Mitsubishi 7900
|
||||
PLFM_TMS320C3 = 0x46 # Texas Instruments TMS320C3
|
||||
PLFM_KR1878 = 0x47 # Angstrem KR1878
|
||||
PLFM_AD218X = 0x48 # Analog Devices ADSP 218X
|
||||
PLFM_OAKDSP = 0x49 # Atmel OAK DSP
|
||||
PLFM_TLCS900 = 0x50 # Toshiba TLCS-900
|
||||
PLFM_C39 = 0x51 # Rockwell C39
|
||||
PLFM_CR16 = 0x52 # NSC CR16
|
||||
PLFM_MN102L00 = 0x53 # Panasonic MN10200
|
||||
PLFM_TMS320C1X = 0x54 # Texas Instruments TMS320C1x
|
||||
PLFM_NEC_V850X = 0x55 # NEC V850 and V850ES/E1/E2
|
||||
PLFM_SCR_ADPT = 0x56 # Processor module adapter for processor modules written in scripting languages
|
||||
PLFM_EBC = 0x57 # EFI Bytecode
|
||||
PLFM_MSP430 = 0x58 # Texas Instruments MSP430
|
||||
PLFM_386 = 0 # Intel 80x86
|
||||
PLFM_Z80 = 1 # 8085, Z80
|
||||
PLFM_I860 = 2 # Intel 860
|
||||
PLFM_8051 = 3 # 8051
|
||||
PLFM_TMS = 4 # Texas Instruments TMS320C5x
|
||||
PLFM_6502 = 5 # 6502
|
||||
PLFM_PDP = 6 # PDP11
|
||||
PLFM_68K = 7 # Motoroal 680x0
|
||||
PLFM_JAVA = 8 # Java
|
||||
PLFM_6800 = 9 # Motorola 68xx
|
||||
PLFM_ST7 = 10 # SGS-Thomson ST7
|
||||
PLFM_MC6812 = 11 # Motorola 68HC12
|
||||
PLFM_MIPS = 12 # MIPS
|
||||
PLFM_ARM = 13 # Advanced RISC Machines
|
||||
PLFM_TMSC6 = 14 # Texas Instruments TMS320C6x
|
||||
PLFM_PPC = 15 # PowerPC
|
||||
PLFM_80196 = 16 # Intel 80196
|
||||
PLFM_Z8 = 17 # Z8
|
||||
PLFM_SH = 18 # Renesas (formerly Hitachi) SuperH
|
||||
PLFM_NET = 19 # Microsoft Visual Studio.Net
|
||||
PLFM_AVR = 20 # Atmel 8-bit RISC processor(s)
|
||||
PLFM_H8 = 21 # Hitachi H8/300, H8/2000
|
||||
PLFM_PIC = 22 # Microchip's PIC
|
||||
PLFM_SPARC = 23 # SPARC
|
||||
PLFM_ALPHA = 24 # DEC Alpha
|
||||
PLFM_HPPA = 25 # Hewlett-Packard PA-RISC
|
||||
PLFM_H8500 = 26 # Hitachi H8/500
|
||||
PLFM_TRICORE = 27 # Tasking Tricore
|
||||
PLFM_DSP56K = 28 # Motorola DSP5600x
|
||||
PLFM_C166 = 29 # Siemens C166 family
|
||||
PLFM_ST20 = 30 # SGS-Thomson ST20
|
||||
PLFM_IA64 = 31 # Intel Itanium IA64
|
||||
PLFM_I960 = 32 # Intel 960
|
||||
PLFM_F2MC = 33 # Fujistu F2MC-16
|
||||
PLFM_TMS320C54 = 34 # Texas Instruments TMS320C54xx
|
||||
PLFM_TMS320C55 = 35 # Texas Instruments TMS320C55xx
|
||||
PLFM_TRIMEDIA = 36 # Trimedia
|
||||
PLFM_M32R = 37 # Mitsubishi 32bit RISC
|
||||
PLFM_NEC_78K0 = 38 # NEC 78K0
|
||||
PLFM_NEC_78K0S = 39 # NEC 78K0S
|
||||
PLFM_M740 = 40 # Mitsubishi 8bit
|
||||
PLFM_M7700 = 41 # Mitsubishi 16bit
|
||||
PLFM_ST9 = 42 # ST9+
|
||||
PLFM_FR = 43 # Fujitsu FR Family
|
||||
PLFM_MC6816 = 44 # Motorola 68HC16
|
||||
PLFM_M7900 = 45 # Mitsubishi 7900
|
||||
PLFM_TMS320C3 = 46 # Texas Instruments TMS320C3
|
||||
PLFM_KR1878 = 47 # Angstrem KR1878
|
||||
PLFM_AD218X = 48 # Analog Devices ADSP 218X
|
||||
PLFM_OAKDSP = 49 # Atmel OAK DSP
|
||||
PLFM_TLCS900 = 50 # Toshiba TLCS-900
|
||||
PLFM_C39 = 51 # Rockwell C39
|
||||
PLFM_CR16 = 52 # NSC CR16
|
||||
PLFM_MN102L00 = 53 # Panasonic MN10200
|
||||
PLFM_TMS320C1X = 54 # Texas Instruments TMS320C1x
|
||||
PLFM_NEC_V850X = 55 # NEC V850 and V850ES/E1/E2
|
||||
PLFM_SCR_ADPT = 56 # Processor module adapter for processor modules written in scripting languages
|
||||
PLFM_EBC = 57 # EFI Bytecode
|
||||
PLFM_MSP430 = 58 # Texas Instruments MSP430
|
||||
PLFM_SPU = 59 # Cell Broadband Engine Synergistic Processor Unit
|
||||
|
||||
#
|
||||
# processor_t.flag
|
||||
|
Loading…
Reference in New Issue
Block a user