Source code for zigzi.Stack

"""Stack,
helper class for stack.
"""

from DataObject import *


[docs]class Stack(DataObject): _Stack_frame_point = "Stack_Frame_Pointer" _Stack_base_point = "Stack_Base_Pointer" def __init__(self, base_address, stack_size=0x1000): DataObject.__init__(self, base_address) self.declare_dword(0, self._Stack_frame_point) self.declare_dword(0, self._Stack_base_point) stack_space = [chr(int("0", 16))] * stack_size # allocation stack space stack_point = self.append_chunk(stack_space, "stack") # This is only specification of stack # set _frame_point to base_point self.set_variable_value(self._Stack_frame_point, stack_point) self.set_variable_value(self._Stack_base_point, stack_point) @property def frame_point(self): return self.get_variable_reference(self._Stack_frame_point) @frame_point.setter def frame_point(self, value): return self.set_variable_value(self._Stack_frame_point, value) @property def base_point(self): return self.get_variable_reference(self._Stack_base_point) @base_point.setter def base_point(self, value): return self.set_variable_value(self._Stack_base_point, value)
[docs] def push(self, value, variable_name=None): self.frame_point = self.append_dword(value, variable_name) return self.frame_point
[docs] def pop(self): value = self.get_variable_value(self.frame_point) self.frame_point -= 4 return value