winIDEA SDK
test_seed_get_stack_usage.py
1# This script is licensed under BSD License, see file LICENSE.txt.
2#
3# (c) TASKING Germany GmbH, 2023
4
5import isystem.connect as ic
6
7
8winidea_id = ''
9
10
11def test_seedGetStackUsage():
12 connMgr = ic.ConnectionMgr()
13 connMgr.connect(ic.CConnectionConfig().instanceId(winidea_id))
14
15 # Initialize controllers
16 sessCtrl = ic.CSessionCtrl(connMgr)
17 execCtrl = ic.CExecutionController(connMgr)
18 addrCtrl = ic.CAddressController(connMgr)
19 cfgCtrl = ic.CConfigurationController(connMgr)
20 dataCtrl = ic.CDataController(connMgr)
21
22 # Get stack end from program symbols
23 userStackEnd = addrCtrl.getVariableAddress('_edata')
24
25 # Define addresses and value to write to the unused stack area
26 endAddr = userStackEnd.getAddress()
27 startAddr = endAddr - 1024
28 value = 0x55
29
30 # Get current process and choose option controller for its StackUsage
31 stack_cfg = cfgCtrl.ide_app().opt('StackUsage')
32
33 # Configure stack
34 stack_cfg.set_bool('Use', True)
35 stack_cfg.set_uint('Pattern', value)
36 stack_cfg.set('Position', 'End')
37 stack_cfg.set('Start', str(hex(startAddr)))
38 stack_cfg.set('End', str(hex(endAddr)))
39
40 sessCtrl.begin_reset()
41 execCtrl.run()
42 execCtrl.stop()
43
44 dataCtrl.seedStack()
45
46 stackUsage = dataCtrl.getStackUsage()
47 print(f"Base address: {stackUsage.getBase()}")
48 print(f"Stack size: {stackUsage.getSize()}")
49 print(f"Used stack size: {stackUsage.getUsed()}")
50
51
52if __name__ == "__main__":
53 test_seedGetStackUsage()