/* * PROJECT: MSVC runtime check support library * LICENSE: BSD - See COPYING.ARM in the top level directory * PURPOSE: Provides support functions for MSVC runtime checks * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org) */ #include .code EXTERN __RTC_Failure:PROC /* This function is invoked like this: mov esi, esp // Do the actual function call cmp esp, esi call __RTC_CheckEsp http://stackoverflow.com/questions/3914750/hows-rtc-checkesp-implemented */ PUBLIC __RTC_CheckEsp __RTC_CheckEsp: /* We check if the zero flag is set, and if it is, everything is fine and we return to the caller */ je __RTC_CheckEsp_return push ebp mov ebp, esp pusha // void _RTC_Failure(void* retaddr, int errnum); push 0 // errnum push dword ptr [esp + 4] // retaddr call __RTC_Failure add esp, 8 popa pop ebp __RTC_CheckEsp_return: ret END