mirror of
https://github.com/cemu-project/idapython.git
synced 2024-11-28 03:54:18 +01:00
Tabs converted to 4 spaces in Python sources.
This commit is contained in:
parent
921d57098a
commit
398ffdae3a
@ -14,340 +14,340 @@ idautils.py - High level utility functions for IDA
|
|||||||
import idaapi
|
import idaapi
|
||||||
|
|
||||||
def refs(ea, funcfirst, funcnext):
|
def refs(ea, funcfirst, funcnext):
|
||||||
"""
|
"""
|
||||||
Generic reference collector - INTERNAL USE ONLY.
|
Generic reference collector - INTERNAL USE ONLY.
|
||||||
"""
|
"""
|
||||||
reflist = []
|
reflist = []
|
||||||
|
|
||||||
ref = funcfirst(ea)
|
ref = funcfirst(ea)
|
||||||
|
|
||||||
if ref != idaapi.BADADDR:
|
if ref != idaapi.BADADDR:
|
||||||
reflist.append(ref)
|
reflist.append(ref)
|
||||||
|
|
||||||
while 1:
|
while 1:
|
||||||
ref = funcnext(ea, ref)
|
ref = funcnext(ea, ref)
|
||||||
|
|
||||||
if ref == idaapi.BADADDR:
|
if ref == idaapi.BADADDR:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
reflist.append(ref)
|
reflist.append(ref)
|
||||||
|
|
||||||
return reflist
|
return reflist
|
||||||
|
|
||||||
|
|
||||||
def CodeRefsTo(ea, flow):
|
def CodeRefsTo(ea, flow):
|
||||||
"""
|
"""
|
||||||
Get a list of code references to 'ea'
|
Get a list of code references to 'ea'
|
||||||
|
|
||||||
@param ea: Target address
|
@param ea: Target address
|
||||||
@param flow: Follow normal code flow or not
|
@param flow: Follow normal code flow or not
|
||||||
@type flow: Boolean (0/1, False/True)
|
@type flow: Boolean (0/1, False/True)
|
||||||
|
|
||||||
@return: list of references (may be empty list)
|
@return: list of references (may be empty list)
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
for ref in CodeRefsTo(ScreenEA(), 1):
|
for ref in CodeRefsTo(ScreenEA(), 1):
|
||||||
print ref
|
print ref
|
||||||
"""
|
"""
|
||||||
if flow == 1:
|
if flow == 1:
|
||||||
return refs(ea, idaapi.get_first_cref_to, idaapi.get_next_cref_to)
|
return refs(ea, idaapi.get_first_cref_to, idaapi.get_next_cref_to)
|
||||||
else:
|
else:
|
||||||
return refs(ea, idaapi.get_first_fcref_to, idaapi.get_next_fcref_to)
|
return refs(ea, idaapi.get_first_fcref_to, idaapi.get_next_fcref_to)
|
||||||
|
|
||||||
|
|
||||||
def CodeRefsFrom(ea, flow):
|
def CodeRefsFrom(ea, flow):
|
||||||
"""
|
"""
|
||||||
Get a list of code references from 'ea'
|
Get a list of code references from 'ea'
|
||||||
|
|
||||||
@param ea: Target address
|
@param ea: Target address
|
||||||
@param flow: Follow normal code flow or not
|
@param flow: Follow normal code flow or not
|
||||||
@type flow: Boolean (0/1, False/True)
|
@type flow: Boolean (0/1, False/True)
|
||||||
|
|
||||||
@return: list of references (may be empty list)
|
@return: list of references (may be empty list)
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
for ref in CodeRefsFrom(ScreenEA(), 1):
|
for ref in CodeRefsFrom(ScreenEA(), 1):
|
||||||
print ref
|
print ref
|
||||||
"""
|
"""
|
||||||
if flow == 1:
|
if flow == 1:
|
||||||
return refs(ea, idaapi.get_first_cref_from, idaapi.get_next_cref_from)
|
return refs(ea, idaapi.get_first_cref_from, idaapi.get_next_cref_from)
|
||||||
else:
|
else:
|
||||||
return refs(ea, idaapi.get_first_fcref_from, idaapi.get_next_fcref_from)
|
return refs(ea, idaapi.get_first_fcref_from, idaapi.get_next_fcref_from)
|
||||||
|
|
||||||
|
|
||||||
def DataRefsTo(ea):
|
def DataRefsTo(ea):
|
||||||
"""
|
"""
|
||||||
Get a list of data references to 'ea'
|
Get a list of data references to 'ea'
|
||||||
|
|
||||||
@param ea: Target address
|
@param ea: Target address
|
||||||
|
|
||||||
@return: list of references (may be empty list)
|
@return: list of references (may be empty list)
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
for ref in DataRefsTo(ScreenEA(), 1):
|
for ref in DataRefsTo(ScreenEA(), 1):
|
||||||
print ref
|
print ref
|
||||||
"""
|
"""
|
||||||
return refs(ea, idaapi.get_first_dref_to, idaapi.get_next_dref_to)
|
return refs(ea, idaapi.get_first_dref_to, idaapi.get_next_dref_to)
|
||||||
|
|
||||||
|
|
||||||
def DataRefsFrom(ea):
|
def DataRefsFrom(ea):
|
||||||
"""
|
"""
|
||||||
Get a list of data references from 'ea'
|
Get a list of data references from 'ea'
|
||||||
|
|
||||||
@param ea: Target address
|
@param ea: Target address
|
||||||
|
|
||||||
@return: list of references (may be empty list)
|
@return: list of references (may be empty list)
|
||||||
|
|
||||||
Example::
|
Example::
|
||||||
|
|
||||||
for ref in DataRefsFrom(ScreenEA(), 1):
|
for ref in DataRefsFrom(ScreenEA(), 1):
|
||||||
print ref
|
print ref
|
||||||
"""
|
"""
|
||||||
return refs(ea, idaapi.get_first_dref_from, idaapi.get_next_dref_from)
|
return refs(ea, idaapi.get_first_dref_from, idaapi.get_next_dref_from)
|
||||||
|
|
||||||
|
|
||||||
def XrefTypeName(typecode):
|
def XrefTypeName(typecode):
|
||||||
"""
|
"""
|
||||||
Convert cross-reference type codes to readable names
|
Convert cross-reference type codes to readable names
|
||||||
|
|
||||||
@param typecode: cross-reference type code
|
@param typecode: cross-reference type code
|
||||||
"""
|
"""
|
||||||
ref_types = {
|
ref_types = {
|
||||||
0 : 'Data_Unknown',
|
0 : 'Data_Unknown',
|
||||||
1 : 'Data_Offset',
|
1 : 'Data_Offset',
|
||||||
2 : 'Data_Write',
|
2 : 'Data_Write',
|
||||||
3 : 'Data_Read',
|
3 : 'Data_Read',
|
||||||
4 : 'Data_Text',
|
4 : 'Data_Text',
|
||||||
5 : 'Data_Informational',
|
5 : 'Data_Informational',
|
||||||
16 : 'Code_Far_Call',
|
16 : 'Code_Far_Call',
|
||||||
17 : 'Code_Near_Call',
|
17 : 'Code_Near_Call',
|
||||||
18 : 'Code_Far_Jump',
|
18 : 'Code_Far_Jump',
|
||||||
19 : 'Code_Near_Jump',
|
19 : 'Code_Near_Jump',
|
||||||
20 : 'Code_User',
|
20 : 'Code_User',
|
||||||
21 : 'Ordinary_Flow'
|
21 : 'Ordinary_Flow'
|
||||||
}
|
}
|
||||||
assert typecode in ref_types, "unknown reference type %d" % typecode
|
assert typecode in ref_types, "unknown reference type %d" % typecode
|
||||||
return ref_types[typecode]
|
return ref_types[typecode]
|
||||||
|
|
||||||
|
|
||||||
def XrefsFrom(ea, flags=0):
|
def XrefsFrom(ea, flags=0):
|
||||||
"""
|
"""
|
||||||
Return all references from address 'ea'
|
Return all references from address 'ea'
|
||||||
|
|
||||||
@param ea: Reference address
|
@param ea: Reference address
|
||||||
@param flags: any of idaapi.XREF_* flags
|
@param flags: any of idaapi.XREF_* flags
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
for xref in XrefsFrom(here(), 0):
|
for xref in XrefsFrom(here(), 0):
|
||||||
print xref.type, XrefTypeName(xref.type), \
|
print xref.type, XrefTypeName(xref.type), \
|
||||||
'from', hex(xref.frm), 'to', hex(xref.to)
|
'from', hex(xref.frm), 'to', hex(xref.to)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
xref = idaapi.xrefblk_t()
|
xref = idaapi.xrefblk_t()
|
||||||
if xref.first_from(ea, flags):
|
if xref.first_from(ea, flags):
|
||||||
yield xref
|
yield xref
|
||||||
while xref.next_from():
|
while xref.next_from():
|
||||||
yield xref
|
yield xref
|
||||||
|
|
||||||
|
|
||||||
def XrefsTo(ea, flags=0):
|
def XrefsTo(ea, flags=0):
|
||||||
"""
|
"""
|
||||||
Return all references to address 'ea'
|
Return all references to address 'ea'
|
||||||
|
|
||||||
@param ea: Reference address
|
@param ea: Reference address
|
||||||
@param flags: any of idaapi.XREF_* flags
|
@param flags: any of idaapi.XREF_* flags
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
for xref in XrefsTo(here(), 0):
|
for xref in XrefsTo(here(), 0):
|
||||||
print xref.type, XrefTypeName(xref.type), \
|
print xref.type, XrefTypeName(xref.type), \
|
||||||
'from', hex(xref.frm), 'to', hex(xref.to)
|
'from', hex(xref.frm), 'to', hex(xref.to)
|
||||||
"""
|
"""
|
||||||
xref = idaapi.xrefblk_t()
|
xref = idaapi.xrefblk_t()
|
||||||
if xref.first_to(ea, flags):
|
if xref.first_to(ea, flags):
|
||||||
yield xref
|
yield xref
|
||||||
while xref.next_to():
|
while xref.next_to():
|
||||||
yield xref
|
yield xref
|
||||||
|
|
||||||
|
|
||||||
def Heads(start, end):
|
def Heads(start, end):
|
||||||
"""
|
"""
|
||||||
Get a list of heads (instructions or data)
|
Get a list of heads (instructions or data)
|
||||||
|
|
||||||
@param start: start address (this one is always included)
|
@param start: start address (this one is always included)
|
||||||
@param end: end address
|
@param end: end address
|
||||||
|
|
||||||
@return: list of heads between start and end
|
@return: list of heads between start and end
|
||||||
"""
|
"""
|
||||||
headlist = []
|
headlist = []
|
||||||
headlist.append(start)
|
headlist.append(start)
|
||||||
|
|
||||||
ea = start
|
ea = start
|
||||||
|
|
||||||
while 1:
|
while 1:
|
||||||
ea = idaapi.next_head(ea, end)
|
ea = idaapi.next_head(ea, end)
|
||||||
|
|
||||||
if ea == idaapi.BADADDR:
|
if ea == idaapi.BADADDR:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
headlist.append(ea)
|
headlist.append(ea)
|
||||||
|
|
||||||
return headlist
|
return headlist
|
||||||
|
|
||||||
|
|
||||||
def Functions(start, end):
|
def Functions(start, end):
|
||||||
"""
|
"""
|
||||||
Get a list of functions
|
Get a list of functions
|
||||||
|
|
||||||
@param start: start address
|
@param start: start address
|
||||||
@param end: end address
|
@param end: end address
|
||||||
|
|
||||||
@return: list of heads between start and end
|
@return: list of heads between start and end
|
||||||
|
|
||||||
@note: The last function that starts before 'end' is included even
|
@note: The last function that starts before 'end' is included even
|
||||||
if it extends beyond 'end'.
|
if it extends beyond 'end'.
|
||||||
"""
|
"""
|
||||||
startaddr = start
|
startaddr = start
|
||||||
endaddr = end
|
endaddr = end
|
||||||
|
|
||||||
funclist = []
|
funclist = []
|
||||||
|
|
||||||
func = idaapi.get_func(start)
|
func = idaapi.get_func(start)
|
||||||
|
|
||||||
if func:
|
if func:
|
||||||
funclist.append(func.startEA)
|
funclist.append(func.startEA)
|
||||||
|
|
||||||
ea = start
|
ea = start
|
||||||
|
|
||||||
while 1:
|
while 1:
|
||||||
func = idaapi.get_next_func(ea)
|
func = idaapi.get_next_func(ea)
|
||||||
|
|
||||||
if not func: break
|
if not func: break
|
||||||
|
|
||||||
if func.startEA < end:
|
if func.startEA < end:
|
||||||
funclist.append(func.startEA)
|
funclist.append(func.startEA)
|
||||||
ea = func.startEA
|
ea = func.startEA
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
return funclist
|
return funclist
|
||||||
|
|
||||||
|
|
||||||
def Chunks(start):
|
def Chunks(start):
|
||||||
"""
|
"""
|
||||||
Get a list of function chunks
|
Get a list of function chunks
|
||||||
|
|
||||||
@param start: address of the function
|
@param start: address of the function
|
||||||
|
|
||||||
@return: list of funcion chunks (tuples of the form (start_ea, end_ea))
|
@return: list of funcion chunks (tuples of the form (start_ea, end_ea))
|
||||||
belonging to the function
|
belonging to the function
|
||||||
"""
|
"""
|
||||||
function_chunks = []
|
function_chunks = []
|
||||||
|
|
||||||
func_iter = idaapi.func_tail_iterator_t( idaapi.get_func( start ) )
|
func_iter = idaapi.func_tail_iterator_t( idaapi.get_func( start ) )
|
||||||
status = func_iter.main()
|
status = func_iter.main()
|
||||||
|
|
||||||
while status:
|
while status:
|
||||||
chunk = func_iter.chunk()
|
chunk = func_iter.chunk()
|
||||||
function_chunks.append((chunk.startEA, chunk.endEA))
|
function_chunks.append((chunk.startEA, chunk.endEA))
|
||||||
status = func_iter.next()
|
status = func_iter.next()
|
||||||
|
|
||||||
return function_chunks
|
return function_chunks
|
||||||
|
|
||||||
|
|
||||||
def Segments():
|
def Segments():
|
||||||
"""
|
"""
|
||||||
Get list of segments (sections) in the binary image
|
Get list of segments (sections) in the binary image
|
||||||
|
|
||||||
@return: List of segment start addresses.
|
@return: List of segment start addresses.
|
||||||
"""
|
"""
|
||||||
seglist = []
|
seglist = []
|
||||||
|
|
||||||
for n in range(idaapi.get_segm_qty()):
|
for n in range(idaapi.get_segm_qty()):
|
||||||
seg = idaapi.getnseg(n)
|
seg = idaapi.getnseg(n)
|
||||||
|
|
||||||
if not seg:
|
if not seg:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
seglist.append(seg.startEA)
|
seglist.append(seg.startEA)
|
||||||
|
|
||||||
return seglist
|
return seglist
|
||||||
|
|
||||||
|
|
||||||
def GetDataList(ea, count, itemsize=1):
|
def GetDataList(ea, count, itemsize=1):
|
||||||
"""
|
"""
|
||||||
Get data list - INTERNAL USE ONLY
|
Get data list - INTERNAL USE ONLY
|
||||||
"""
|
"""
|
||||||
getdata = None
|
getdata = None
|
||||||
|
|
||||||
if itemsize == 1:
|
if itemsize == 1:
|
||||||
getdata = idaapi.get_byte
|
getdata = idaapi.get_byte
|
||||||
if itemsize == 2:
|
if itemsize == 2:
|
||||||
getdata = idaapi.get_word
|
getdata = idaapi.get_word
|
||||||
if itemsize == 4:
|
if itemsize == 4:
|
||||||
getdata = idaapi.get_dword
|
getdata = idaapi.get_dword
|
||||||
|
|
||||||
if getdata == None:
|
if getdata == None:
|
||||||
raise ValueError, "Invalid data size! Must be 1, 2 or 4"
|
raise ValueError, "Invalid data size! Must be 1, 2 or 4"
|
||||||
|
|
||||||
list = []
|
list = []
|
||||||
|
|
||||||
for offs in range(count):
|
for offs in range(count):
|
||||||
list.append(getdata(ea))
|
list.append(getdata(ea))
|
||||||
ea = ea + itemsize
|
ea = ea + itemsize
|
||||||
|
|
||||||
return list
|
return list
|
||||||
|
|
||||||
|
|
||||||
def PutDataList(ea, list, itemsize=1):
|
def PutDataList(ea, list, itemsize=1):
|
||||||
"""
|
"""
|
||||||
Put data list - INTERNAL USE ONLY
|
Put data list - INTERNAL USE ONLY
|
||||||
"""
|
"""
|
||||||
putdata = None
|
putdata = None
|
||||||
|
|
||||||
if itemsize == 1:
|
if itemsize == 1:
|
||||||
putdata = idaapi.patch_byte
|
putdata = idaapi.patch_byte
|
||||||
if itemsize == 2:
|
if itemsize == 2:
|
||||||
putdata = idaapi.patch_word
|
putdata = idaapi.patch_word
|
||||||
if itemsize == 4:
|
if itemsize == 4:
|
||||||
putdata = idaapi.patch_dword
|
putdata = idaapi.patch_dword
|
||||||
|
|
||||||
if putdata == None:
|
if putdata == None:
|
||||||
raise ValueError, "Invalid data size! Must be 1, 2 or 4"
|
raise ValueError, "Invalid data size! Must be 1, 2 or 4"
|
||||||
|
|
||||||
for val in list:
|
for val in list:
|
||||||
putdata(ea, val)
|
putdata(ea, val)
|
||||||
ea = ea + itemsize
|
ea = ea + itemsize
|
||||||
|
|
||||||
|
|
||||||
def MapDataList(ea, length, func, wordsize=1):
|
def MapDataList(ea, length, func, wordsize=1):
|
||||||
"""
|
"""
|
||||||
Map through a list of data words in the database
|
Map through a list of data words in the database
|
||||||
|
|
||||||
@param ea: start address
|
@param ea: start address
|
||||||
@param length: number of words to map
|
@param length: number of words to map
|
||||||
@param func: mapping function
|
@param func: mapping function
|
||||||
@param wordsize: size of words to map [default: 1 byte]
|
@param wordsize: size of words to map [default: 1 byte]
|
||||||
|
|
||||||
@return: None
|
@return: None
|
||||||
"""
|
"""
|
||||||
PutDataList(ea, map(func, GetDataList(ea, length, wordsize)), wordsize)
|
PutDataList(ea, map(func, GetDataList(ea, length, wordsize)), wordsize)
|
||||||
|
|
||||||
|
|
||||||
def GetInputFileMD5():
|
def GetInputFileMD5():
|
||||||
"""
|
"""
|
||||||
Return the MD5 hash of the input binary file
|
Return the MD5 hash of the input binary file
|
||||||
|
|
||||||
@return: MD5 string or None on error
|
@return: MD5 string or None on error
|
||||||
"""
|
"""
|
||||||
ua=idaapi.ucharArray(16)
|
ua=idaapi.ucharArray(16)
|
||||||
if idaapi.retrieve_input_file_md5(ua.cast()):
|
if idaapi.retrieve_input_file_md5(ua.cast()):
|
||||||
md5str=""
|
md5str=""
|
||||||
for i in range(16):
|
for i in range(16):
|
||||||
md5str += "%02x" % ua[i]
|
md5str += "%02x" % ua[i]
|
||||||
return md5str
|
return md5str
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
6794
python/idc.py
6794
python/idc.py
File diff suppressed because it is too large
Load Diff
118
python/init.py
118
python/init.py
@ -19,65 +19,65 @@ warnings.filterwarnings('ignore', category=FutureWarning)
|
|||||||
|
|
||||||
|
|
||||||
def addscriptpath(script):
|
def addscriptpath(script):
|
||||||
"""
|
"""
|
||||||
Add the path part of the scriptfile to the system path to
|
Add the path part of the scriptfile to the system path to
|
||||||
allow modules to be loaded from the same place.
|
allow modules to be loaded from the same place.
|
||||||
|
|
||||||
Each path is added only once.
|
Each path is added only once.
|
||||||
"""
|
"""
|
||||||
pathfound = 0
|
pathfound = 0
|
||||||
|
|
||||||
scriptpath = os.path.dirname(script)
|
scriptpath = os.path.dirname(script)
|
||||||
|
|
||||||
for pathitem in sys.path:
|
for pathitem in sys.path:
|
||||||
if pathitem == scriptpath:
|
if pathitem == scriptpath:
|
||||||
pathfound = 1
|
pathfound = 1
|
||||||
break
|
break
|
||||||
|
|
||||||
if pathfound == 0:
|
if pathfound == 0:
|
||||||
sys.path.append(scriptpath)
|
sys.path.append(scriptpath)
|
||||||
|
|
||||||
# Add the script to ScriptBox if it's not there yet
|
# Add the script to ScriptBox if it's not there yet
|
||||||
if not script in ScriptBox_instance.list:
|
if not script in ScriptBox_instance.list:
|
||||||
ScriptBox_instance.list.insert(0, script)
|
ScriptBox_instance.list.insert(0, script)
|
||||||
|
|
||||||
|
|
||||||
def runscript(script):
|
def runscript(script):
|
||||||
"""
|
"""
|
||||||
Run the specified script after adding its directory path to
|
Run the specified script after adding its directory path to
|
||||||
system path.
|
system path.
|
||||||
|
|
||||||
This function is used by the low-level plugin code.
|
This function is used by the low-level plugin code.
|
||||||
"""
|
"""
|
||||||
addscriptpath(script)
|
addscriptpath(script)
|
||||||
argv = sys.argv
|
argv = sys.argv
|
||||||
sys.argv = [ script ]
|
sys.argv = [ script ]
|
||||||
execfile(script, globals())
|
execfile(script, globals())
|
||||||
sys.argv = argv
|
sys.argv = argv
|
||||||
|
|
||||||
def print_banner():
|
def print_banner():
|
||||||
version1 = "IDAPython version %d.%d.%d %s (serial %d) initialized" % IDAPYTHON_VERSION
|
version1 = "IDAPython version %d.%d.%d %s (serial %d) initialized" % IDAPYTHON_VERSION
|
||||||
version2 = "Python interpreter version %d.%d.%d %s (serial %d)" % sys.version_info
|
version2 = "Python interpreter version %d.%d.%d %s (serial %d)" % sys.version_info
|
||||||
linelen = max(len(version1), len(version2))
|
linelen = max(len(version1), len(version2))
|
||||||
|
|
||||||
print '-' * linelen
|
print '-' * linelen
|
||||||
print version1
|
print version1
|
||||||
print version2
|
print version2
|
||||||
print '-' * linelen
|
print '-' * linelen
|
||||||
|
|
||||||
|
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
# Take over the standard text outputs
|
# Take over the standard text outputs
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
class MyStdOut:
|
class MyStdOut:
|
||||||
"""
|
"""
|
||||||
Dummy file-like class that receives stout and stderr
|
Dummy file-like class that receives stout and stderr
|
||||||
"""
|
"""
|
||||||
def write(self, text):
|
def write(self, text):
|
||||||
_idaapi.msg(text.replace("%", "%%"))
|
_idaapi.msg(text.replace("%", "%%"))
|
||||||
|
|
||||||
def flush(self):
|
def flush(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
# Redirect stderr and stdout to the IDA message window
|
# Redirect stderr and stdout to the IDA message window
|
||||||
@ -103,24 +103,24 @@ from idautils import *
|
|||||||
# Build up the ScriptBox tool
|
# Build up the ScriptBox tool
|
||||||
#-----------------------------------------------------------
|
#-----------------------------------------------------------
|
||||||
class ScriptBox(Choose):
|
class ScriptBox(Choose):
|
||||||
def __init__(self, list=[]):
|
def __init__(self, list=[]):
|
||||||
Choose.__init__(self, list, "ScriptBox", 1)
|
Choose.__init__(self, list, "ScriptBox", 1)
|
||||||
self.width = 50
|
self.width = 50
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
if len(self.list) == 0:
|
if len(self.list) == 0:
|
||||||
Warning("ScriptBox history is empty.\nRun some script with Alt-9 and try again.")
|
Warning("ScriptBox history is empty.\nRun some script with Alt-9 and try again.")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
n = self.choose()
|
n = self.choose()
|
||||||
|
|
||||||
if n > 0:
|
if n > 0:
|
||||||
return self.list[n-1]
|
return self.list[n-1]
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def addscript(self, scriptpath):
|
def addscript(self, scriptpath):
|
||||||
self.list.append(scriptpath)
|
self.list.append(scriptpath)
|
||||||
|
|
||||||
ScriptBox_instance = ScriptBox([])
|
ScriptBox_instance = ScriptBox([])
|
||||||
|
|
||||||
@ -128,9 +128,9 @@ ScriptBox_instance = ScriptBox([])
|
|||||||
userrc = get_user_idadir() + os.sep + "idapythonrc.py"
|
userrc = get_user_idadir() + os.sep + "idapythonrc.py"
|
||||||
|
|
||||||
if os.path.exists(userrc):
|
if os.path.exists(userrc):
|
||||||
runscript(userrc)
|
runscript(userrc)
|
||||||
# Remove the user script from the history
|
# Remove the user script from the history
|
||||||
del ScriptBox_instance.list[0]
|
del ScriptBox_instance.list[0]
|
||||||
|
|
||||||
|
|
||||||
# All done, ready to rock.
|
# All done, ready to rock.
|
||||||
|
Loading…
Reference in New Issue
Block a user