"""
This script demonstrates usage of API for getting call hierarchy
from symbol information. Analyzer is not required for this
information to be available.
"""
import sys
import isystem.connect as ic
winidea_id = ''
def printFunctions(addrCtrl, addresses):
names = ic.StrVector()
types = ic.IntVector()
addrCtrl.getFunctionNames(addresses, names, types)
idx = 0
for addr in addresses:
print(hex(addr), names[idx])
idx += 1
if __name__ == "__main__":
cmgr = ic.ConnectionMgr()
cmgr.connect(ic.CConnectionConfig().instanceId(winidea_id))
debugCtrl = ic.CDebugFacade(cmgr)
debugCtrl.download()
partition = 0
functionName = 'fibonacci'
if len(sys.argv) > 1:
functionName = sys.argv[1]
dataCtrl = ic.CDataController(cmgr)
addrCtrl = ic.CAddressController(cmgr)
functions = ic.FunctionVector()
dataCtrl.getFunctions(partition, functions)
major, minor, build, _ = ic.getModuleVersion().split('.')
for func in functions:
if func.getName() == functionName:
print('Function info found!')
addrs = ic.AddressVector()
func.getCallsFromFunction(addrs)
print("Functions called from '" + functionName + "':")
printFunctions(addrCtrl, addrs)
func.getCallsToFunction(addrs)
print("\nFunctions which call '" + functionName + "':")
printFunctions(addrCtrl, addrs)
break