void JmpFunction::operator() () { g_CurrJmpFunc = this; if(!m_PreparedArguments) PrepareArguments(); // Not important DWORD t_Addy; if(m_Offset==0) // Are we supposed to start at the function start (0) or somewhere else (m_Offset)? t_Addy = (DWORD)m_Function; else t_Addy = m_Offset; // If this happens, we called StartHere() int t_StackSize = m_Stack.size(); // Number of arguments int t_StackSizeBytes = t_StackSize*sizeof(void*); // byte size for(int i = t_StackSize-1; i>=0; i--) // For each argument { DWORD t_Argument = (m_Arguments[i]); __asm { mov eax, t_Argument // push onto stack push eax } } __asm // call and stack inc { call t_Addy add esp, t_StackSizeBytes } }